JavaScript类型的细节

作者 Lei Zhang 日期 2019-03-25
JavaScript类型的细节

七种语言类型

  1. Undefined
  2. Null
  3. Boolean
  4. Number
  5. String
  6. Object
  7. Symbol(ES6)

Undefined、Null

Undefined表示类型未定义,它的类型只有一个值,就是 undefined。任何变量在赋值前是 Undefined 类型、值为 undefined,一般我们可以用全局变量undefined(就是名为undefined的这个变量来表达这个值),或者void运算来把任意一个表达式变成undefined值。

由于undefined是一个变量而非关键字,所以为了避免无意中的篡改,建议用void 0来获取undefined值。

Undefined 跟 null 有一定的表意差别,null表示的是:“定义了但是为空”。所以,在实际编程时,我们一般不会把变量赋值为undefined,这样可以保证所有值为undefined的变量,都是从未赋值的自然状态。

Null类型也只有一个值,就是null,它的语义表示空值,与undefined不同,null是JavaScript关键字,所以在任何代码中,都可以放心用null关键字来获取null值。

String

String是有最大长度的,长度是2^53 -1,但所谓得最大长度,并非“字符数”。

因为String的意义并非“字符串”,而是字符串的UTF16编码

JavaScript中的字符串是永远无法变更的,一旦字符串构造出来,无法用任何方式改变字符串的内容,所以字符串具有值类型的特征。

Number

JavaScript中的Number类型有2^64-2^53+3个值

其中有几个特殊的值:

  • NaN
  • Infinity,无穷大
  • -Infinity, 负无穷大

另外值得注意的是,JavaScript中有+0-0,在加法类运算中它们没有区别,但是除法的场合则需要特别区分留意(除以-0得到的是-Infinity)。检测+0和-0的方式则是检测 1/x 是Infinity还是-Infinity

根据浮点数的定义,非整数的Number类型无法用==(===也不行)来比较

console.log(0.1 + 0.2 == 0.3);			//false		实际上结果是0.30000000000000004

正确的比较方法应为

console.log(Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON);	
//true Number.EPSILON == 2.220446049250313e-16

其中Number.EPSILON即为JavaScript语言中的最小精度

###Symbol

创建Symbol方式:var mySymbol = Symbol("my symbol");

Object

Todo…