一、null
与 undefined
区别
1.1 区别
(1) 类型不同:
(1) null
(2) undefined
(2) 语义不同:
(1) null:空值,let a = null;
定义了且赋值为null
(2) undefined: let b;
定义了,但是没有赋值。值默认就为undefined。
(3) 是否为关键字:
(1) null:是,所以修改给null赋值,会报错
(2) undefined: 否;所以给undefined赋值不会报错,这样会导致undefined被篡改,所以用void 0 来获取undefined值。
1.2 注意:
(1) null:变量初始化可为空值。
(2) undefined:
- 任何变量都不要赋值为undefined,保证undefined 为未赋值状态
- 任何变量定义了但未赋值时,类型为undefined,值为undefined。
egg:
let b;
定义了,但是没有赋值,则值默认就为undefined。
1.3 其他
let a="lichuyan" // 定义+赋值
let a;
let b = null;
>> a undefined
>> b null
>> c not defined 报错,未定义过。
易模糊点:JS中[类]不等于[类型]
3 === new Number(3) // false
=== 比较【数值 + 类型】。3类型为number,new Number(3) 类型为 Object,类型不一样。
3 == new Number(3) // true
== 只比较【数值】。
二、JS对象两类属性
JS对象基本特征:标记性(唯一性)-> == 都不相等,更别说 === 了。
2.1 总结:
- 当属性取值为false时,不会报错,只是不起作用;
- Object.getOwnPropertyDescriptor('o', name) // 得到name的属性
- 若想改变属性的特征或者定义访问器属性,用Object.defineProperty('o',name,{})