转自重学前端https://time.geekbang.org/column/article/78884前端
js规定了7中语言类型分别为Boolean、Null、Undefined、Number、String、Symbol、Object。bash
undefined是一个变量,咱们避免无心中被篡改,建议使用void 0来获取undefined(等价于void (0) )。咱们通常不会把变量赋值为undefined,这样能够保证全部的值为undefined的变量,都是从未赋值的天然状态。编码
null 表示的是:定义了但为空,null也只有一个值就是null。null是js的一个关键字,因此任什么时候候均可以用null关键字来换取nullspa
布尔类型有两个值。true和false,他们表示逻辑上的真和假,一样true和false也是js的关键字code
String 用于表示文本数据。String 有最大长度是 2^53 - 1,这在通常开发中都是够用的,可是有趣的是,这个所谓最大长度,并不彻底是你理解中的字符数。 由于 String 的意义并不是“字符串”,而是字符串的 UTF16 编码,咱们字符串的操做 charAt、charCodeAt、length 等方法针对的都是 UTF16 编码。因此,字符串的最大长度,其实是受字符串的编码长度影响的。对象
Note:现行的字符集国际标准,字符是以 Unicode 的方式表示的,每个 Unicode 的码点表示一个字符,理论上,Unicode 的范围是无限的。UTF 是 Unicode 的编码方式,规定了码点在计算机中的表示方法,常见的有 UTF16 和 UTF8。 Unicode 的码点一般用 U+??? 来表示,其中 ??? 是十六进制的码点值。 0-65536(U+0000 - U+FFFF)的码点被称为基本字符区域(BMP)。ip
JavaScript 中的 Number 类型有 18437736874454810627(即 2^64-2^53+3) 个值。开发
JavaScript 中的 Number 类型基本符合 IEEE 754-2008 规定的双精度浮点数规则,可是 JavaScript 为了表达几个额外的语言场景(好比不让除以 0 出错,而引入了无穷大的概念),规定了几个例外状况:字符串
另外,值得注意的是,JavaScript 中有 +0 和 -0,在加法类运算中它们没有区别,可是除法的场合则须要特别留意区分,“忘记检测除以 -0,而获得负无穷大”的状况常常会致使错误,而区分 +0 和 -0 的方式,正是检测 1/x 是 Infinity 仍是 -Infinity。it
一样根据浮点数的定义,非整数的 Number 类型没法用 ==(=== 也不行) 来比较,一段著名的代码,这也正是咱们第三题的问题,为何在 JavaScript 中,0.1+0.2 不能 =0.3:
console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON);
复制代码
Symbol 是 ES6 中引入的新类型,它是一切非字符串的对象 key 的集合,在 ES6 规范中,整个对象系统被用 Symbol 重塑。
Object 是 JavaScript 中最复杂的类型,也是 JavaScript 的核心机制之一。Object 表示对象的意思,它是一切有形和无形物体的总称。
在js中,对象的定义是'属性的集合',属性分为数据属性和访问属性,两者均为key-value结构,key能够是字符串或者symboy类型。