https://www.jianshu.com/p/88213b499c4b
前言
1、对象的相关概念
2、对象的创建(简单创建)
3、对象的属性
3.1、数据属性
3.2、访问器属性
4、设置和读取对象中的属性
5、变量存储的是对象的引用
6、基本数据类型可以自动转换成对象数据类型
7、获取对象属性的点方法和中括号法的区别
以下论述是我关于对象的知识点的认识和理解,其中包括了对象是什么?创建对象的基本方式以及对象的相关概念的讲解,希望能给读者带来一些帮助。
//1、Object
var person = new Objcet();
person.name = "Nicholas";
person.age = 29;
person.job = "Software Engineer";
person.sayName = function(){
console.log(this.name);
}
//2、对象字面量
var person = {
name:"Nicholas";
age:29,
job:"Software Engineer",
sayName: function(){
console.log(this.name);
}
}
ECMAScript中有两种属性:数据属性和访问器属性
/*
数据属性包含一个数据值的位置,在这个位置可以读取和写入值
*/
var person = {
name : "Nicholas"
};
>/操作数据属性
/*
通过delete、add来操作数据属性
对未声明的数据属性进行赋值相当于先创建这个属性然后再对这个属性进行赋值
*/
‘use strice‘
var person = {
name : "personName",
age : 23
}
delete person.age;
person.type = ‘chinese‘;
console.log(person);//{name: "personName", type: "chinese"}
>/通过Object.defineProperty()
/*
可以通过
Object.defineProperty(ObjectName , attrituteName ,
{descriptor : true/false});
来操作对象的属性
*/
‘use strice‘
var person = {
name : "personName",
age : 23
}
console.log(person);//{name: "personName", age: 23}
person.name = "hh";
console.log(person);//{name: "hh", age: 23}
// Object.defineProperty(person,"name",{
// writable : false
// })//标准格式
Object.defineProperty(person,"name",{
writable : false,
value : "kk"
})
console.log(person);//{name: "kk", age: 23}
person.name = "gg";
console.log(person);//{name: "kk", age: 23}
/*
访问器属性不包含数据值:它们包含一对儿getter和setter函数(不过这两个函数都不是
必需的)。
在读取访问器属性是,会调用getter函数,这个函数负责返回有效值;
在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据
*/
>/ 操作访问器属性
//访问器属性:yyy
‘use strice‘
var book = {
_year : 2004,
edition : 1
};
console.log(book);
Object.defineProperty(book,"yyy",{
get:function(){
return this._year;
},
set:function(newValue){
if(newValue > 2004){
this.edition += newValue - this._year;
this._year = newValue;
}
}
});
console.log(book.yyy);
book.yyy = 2008;
console.log(book.yyy);
console.log(book);
//1、设置某个属性的特性
Object.defineProperty(ObjectName , attrituteName ,
{descriptor : true/false});
//2、设置多个属性的特性
Object.defineProperties(ObjectName , {attrituteName :
{descriptor : true/false} , attrituteName : {descriptor : true/false}});
//3、读取属性的特性
var descriptors = Object.getOwnPropertyDescriptor(ObjectName,attrituteName);
console.log(descriptors.descriptorName);
1、当我们创建对象并把创建的对象赋值给一个用var声明的变量,这个变量中存储的是这个对象的地址,是这个对象的引用而不是对象本身的赋值。
2、由于变量存储的是对象的引用,所以一些看似是对该变量‘对象’的操作,其实实质上是对这个变量包含的引用所指向的对象的操作,而不是对这个变量的操作,因为这个变量中不是什么对象,而是一个地址引用。
1、对于一些基本数据类型,其实他们也具有对应的对象类型。
2、当一些数据可以表明自己是哪种基本数据类型,当调用到该基本数据类型对应的对象数据类型的时候,JavaScript就会自动的将该基本数据类型转换成对象数据类型。
//1、中括号法可以用变量作为属性名,而点方法不可以;
var obj = {};
obj.name = ‘张三‘;
var myName = ‘name‘;
console.log(obj.myName);//undefined,访问不到对应的属性
console.log(obj[myName]);//张三
//2、中括号法可以用数字作为属性名,而点语法不可以;
//3、中括号法可以使用js的关键字和保留字作为属性名,而点语法不可以(尽量避免在变量或者属性中使用关键字或保留字);
原文:https://www.cnblogs.com/shcrk/p/9249118.html