七种数据类型:分别是简单数据类型: 数字(
number
) 、字符串(string
)、 布尔(Boolean
) 、符号(symbol
)空(null
)、 未定义(undefined
)、复杂数据类型:object
五个falsy值 :
null
undefined
0
NaN
""
1、声明对象的两种语法
方法一:
let obj = {
'name' : 'meng',
'age' : 18
}
方法二:
let obj = new Object({
name : meng,
age : 18
})
-
注意:
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可以省略,省略之后就只能写标识符,特殊字符不能省略,如中文、表情。
- 就算引号省略,键名还是字符串
-
变量做属性名 *之前都是用常量做属性名
let p1='name' let obj={p1:'frank'}这样写,属性名为'p1' let obj={[p1]:'frank'这样写,属性名为 'name'
-
对比
-
不加[]的属性名会自动变成字符串
-
加了[]则会当做变量求值
-
值如果不是字符串,则会自动变成字符串
-
对象的隐藏属性
- js中每一个对象都有一个隐藏属性
- 这个隐藏属性储存着其
共有属性组成的对象
的地址 - 这个
共有属性组成的对象
叫原型 - 也就是说,隐藏属性存储着原型的地址
代码演示
var obj={}
obj.toString() //不报错
//因为obj的隐藏属性对象的对象上有toString()
2、删除对象的属性
delete obj.xxx或delete obj['xxx']
如下图所示:判断对象的属性是否存在,用 'xxx'in obj
返回值为ture
,删除成功
如下图所示obj.name=undefined
删除的是属性值,obj2
中delete
删除的是属性名
3、查看对象的属性
3.1 查看自身所有属性
Object.keys(obj2)
如下图所示
Object.keys()
是查看所有属性
Object.valus()
查看所有值
Object.entries()
查看所有属性和值
3.2查看自身+共有属性的方法
如下图所示:查看自身属性+共有属性
console.dir()
- 或者自己依次用Object.keys打印出obj.proto
3.3'name'in obj和obj.hasOwnProperty('name') 的区别
'name'in obj判断不出属性是否继承自原型 obj.hasOwnProperty('name') 可以查看是否属于共有属性
3.4查看属性
- 两种方法查看属性
- 中括号语法:obj['key']
- 点语法:obj.key
- 坑新人语法:obj[key] //变量key值一般不为'key'
obj.name等价于obj['name']
obj.name不等价与obj[name]
简单来说,这里的name是字符串
,而不是变量
let name='frank'
obj[name]
等价于obj['frank']
而不是 obj['name']
和obj.name
4、修改或增加对象的属性
①直接赋值
let obj={name:'frank'} // name是字符串
obj.name='frank' // name是字符串
obj['name']='frank'
obj[name]='frank' // 错,因为name值不确定
obj['na'+'me']='frank'
let key='name';obj[key]='frank'
let key='name';obj.key='frank' // 错,因为obj.key等价于obj['key']
②批量赋值(是ES6新出的API)
Object.assign(obj,{age:18,gender:'man'})
4.1修改或增加共有属性
- 无法通过自身修改或增加共有属性
* `let obj={},obj2={}`//共有属性
* `obj.toString='xxx'`只会在改obj自身属性
* `obj2.toString`还是在原型上
* 我偏要修改或增加原型上的属性
*` obj._proto_.toString='xxx'` //不推荐用_proto_
* `Obeject.prototype.toString='xxx'`
- 一般来说,不要修改原型,会引起很多问题
4.2 修改隐藏属性
- 推荐使用Object.create
let obj=Object.create(common)
obj.name='frank'
let obj2=Object.create(common)
obj2.name='jack'
<!--规范大概的意思是,要改就一开始就改,别后来再改-->