到目前为止,共7种数据类型:
Null,Undefined,布尔值(Boolean),字符串(String),数值(Number),(独一无二)Symbol,对象(Object)
归纳可以划分两种
基本数据类型:【按值访问,定义了就不可“变”】
Null,Undefined,布尔值(Boolean),字符串(String),数值(Number),(独一无二)Symbol
复杂数据类型或者引用类型:【按引用访问】
对象(Object)

Null类型

这个类型就只有一个null的值,表示空对象指针【使用 typeof 操作符检测 null 值时会返回“object”的原因】

  1. typeof null; // "object"

一个空对象的初始化可赋值为null,可以判断相应的变量是否已经保存过一个对象的引用

  1. // 判断是否保存过一个对象的引用
  2. if (apple != null){
  3. // 对 apple 对象执行某些操作
  4. }


Undefined类型

这个类型就只有一个undefined的值,声明了但是没有赋值,就产生;

  1. // 声明变量,没赋值
  2. var message
  3. console.log(message); // "undefined"
  4. console.log(typeof message); // "undefined"

Boolean类型

只有两个值:truefalse
能够转换成布尔值的分布:Boolean(**)

数据类型 转true 转false
Boolean true false
String 非空字符串 “”【空字符串】
Number 非零数字值 0和NaN
Object 任何对象 null
Undefined / undefined

String类型

字符串,一旦创建就不能改变【改变变量保存的字符串,都是先销毁,再填充进去】;
String 有最大长度是 2^53 - 1,UTF16的编码
所有类型转字符类型,可以使用String(**)

Number类型

“数字”,对应数学中的有理数【包括整数,有限小数和无限循环小数和分数】,但是有精度限制:

  • Number 类型有 18437736874454810627(即 2^64-2^53+3) 个值;
  • 浮点数值的最高精度是 17 位小数【小数点后】;

符合 IEEE 754-2008 规定的双精度浮点数规则,提供数值范围:

  • NaN(非数值),0 除以 0 会返回NaN…Number(“Hello world!”)…
  • Infinity(正无穷),超出在Number.MAX_VALUE,显示Infinity
  • -Infinity(负无穷),超出在 Number.MIN_VALUE,显示-Infinity

同时也因为应用了这个规则,出现了浮点数计算精度问题,例如 0.1 + 0.2 != 0.3,却0.01+0.02=0.03【查看下一篇记录】;

Symbol类型

ES6中引入的新类型,表示独一无二的存在,在 ES6 规范中,整个对象系统被用 Symbol 重塑;

  1. typeof Symbol('apple'); // "Symbol"

作用:作为对象属性的唯一标识符,防止对象属性冲突发生。

  1. // 如果同一个对象属性,如果整合,就产生冲突,覆盖,但Symbol可以避免
  2. let info1 = {
  3. name: "apple",
  4. job: "pineapple",
  5. [Symbol("description")]: "系个apple噶样"
  6. }
  7. let info2 = {
  8. [Symbol("description")]: "成个pine甘样"
  9. }
  10. // 整合
  11. let target = {};
  12. Object.assign(target, info1, info2);
  13. // 结果
  14. {
  15. job: "pineapple",
  16. name: "apple",
  17. Symbol(description): "系个apple噶样",
  18. Symbol(description): "成个pine甘样"
  19. }

当使用JSON.strIngify()时以symbol值作为键的属性会被完全忽略,示意代码:

  1. JSON.stringify({[Symbol("foo")]: "foo"}); // '{}'

Symbol在for...in迭代中不可枚举,如果想要达到效果,借助Object.getOwnPropertySymbols(obj)这个方法。

Object类型

一个数据和功能的集合,用key-value结构展示,key是字符串或者symbol类型,value可以是全部数据存放;储存堆内存中;当复制引用类型的值时,复制它的引用(改变其中一个,另一个随之改变),比较时按其引用比较。
创建对象:
1.使用new操作后跟Object构造函数

  1. var apple = new Object();
  2. apple.name = "pineapple";
  3. apple.age = 25

2.对象字面量表示法,

  1. var apple = {
  2. name: "pineapple",
  3. age: 25
  4. }

访问对象属性:

  1. 点表示法:apple.name // “pineapple”
  2. 方括号表示法:apple[“name”] // “pineapple”

删除对象属性:

  1. delete apple.age

变量解除对象引用,垃圾收集器释放内存:

  1. var appleObj = {};
  2. appleobj =null;

内建类型实例化

  • Array 数组类型,以数字为索引的一组值的有序列表
  • Date 日期和时间类型
  • Error 运行期错误类型
  • Function 函数类型
  • Object 通用对象类型
  • RegExp 正则表达式类型

instanceof 操作符可鉴别继承类型。这意味着所有对象都是 Oject 的实例,因为所有引用类型都继承自 Object

  1. var items = [];
  2. var obj = {};
  3. function reflect(value){
  4. return value;
  5. }
  6. console.log(items instanceof Array); // true;
  7. console.log(obj instanceof Object); // true;
  8. console.log(reflect instanceof Function); // true;

微信公众号:**游戏机室
qrcode_for_gh_0e7f620a68c0_258.jpg**