[1] 数据结构

63 阅读1分钟

一、nullundefined区别

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类型为numbernew Number3) 类型为 Object,类型不一样。

3 == new Number(3) // true
== 只比较【数值】。

image.png

二、JS对象两类属性

JS对象基本特征:标记性(唯一性)-> == 都不相等,更别说 === 了。

image.png

2.1 总结:

  • 当属性取值为false时,不会报错,只是不起作用;
  • Object.getOwnPropertyDescriptor('o', name) // 得到name的属性
  • 若想改变属性的特征或者定义访问器属性,用Object.defineProperty('o',name,{})