JS数据类型和相关问题

1. 数据类型

string、boolean、number、null、undefined、bigInt、symbol、Object(array、function)

2. null和undefined的区别

undefined:未定义的值 。这个值的语义是,希望表示一个变量最原始的状态,而非人为操作的结果 。

  • 声明一个变量,但是没有赋值
  • 访问对象上不存在的属性或者未定义的变量
  • 函数定义了形参,但没有传递实参
  • 函数没有返回值时,默认返回undefined
  • 使用void对表达式求值

null:空值。这个值的语义是,希望表示一个对象被人为的重置为空对象,而非一个变量最原始的状态 。 在内存里的表示就是,栈中的变量没有指向堆中的内存对象。

  • 定义的变量在将来用于保存对象,那么最好将该变量初始化为null
  • 当一个数据不再需要使用时,我们最好通过将其值设置为null来解除引用

特殊的typeof null
null值表示一个空对象指针,它代表的其实就是一个空对象。

3. number和bigInt的区别

JavaScript 所有数字都保存成 64 位浮点数,这给数值的表示带来了两大限制。一是数值的精度只能到 53 个二进制位(相当于 16 个十进制位),大于这个范围的整数,JavaScript 是无法精确表示,这使得 JavaScript 不适合进行科学和金融方面的精确计算。二是大于或等于2的1024次方的数值,JavaScript 无法表示,会返回Infinity。
bigInt:表示大整数,BigInt 类型的数据必须添加后缀n。没有位数的限制。
12n === 12是false,类型不同,12n == 12为true

  • 不能用 Math 对象中的方法。
  • 不能和 Number 类型数值进行混合算术运算,必须转换成同一类型。
  • 虽然 BigInt 不能和 Number 直接进行算术运算,但使用比较运算符(==、<、>等等)直接比较是允许的。
  • BigInt 转换为 Number 可能会丢失精度。

4. symbol

Symbol,表示独一无二的值
当symbol作为属性名时,需要通过Object.getOwnPropertySymbols()遍历,对象的其他方法都无法遍历。
Symbol.for()可以新建两个一样的symbol

let a1 = Symbol.for('a')
let a2 = Symbol.for('a')
console.log(a1 === a2) // true

Symbol.for()与Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境中供搜索,后者不会。Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。

你可能感兴趣的:(javascript,开发语言,ecmascript)