引用类型--KO

2019-04-18  本文已影响0人  写代码的女孩最可爱

js数据类型

在javascript中数据类型分两大类:
基本类型(值类型):number、boolean、String、undefined、null
引用类型:object、Array

区别是什么

没有什么比代码更有说服力了,举个例子:

var a = 1;
var b = a;
b = 0;
var c = [ ];
var d = c;
d[1] = 'a';
b  // 0
a  // 1
d // [empty, "a"]
c // [empty, "a"]

把基本类型赋值给变量时,变量本身改变不会改变原来的变量,把引用类型赋值给变量时,变量本身改变了原来的变量也会变。这是因为,基本类型在赋值的时候是保存的值,引用类型在赋值的时候是保存的引用。当复制保存着某个对象的变量时,操作的是对象的引用,但在为对象添加属性的时候操作的是实际的对象,可以看一道面试题:

var a = {x : 1};
var b = a;
a.a = a = {x : 2};
console.log(a.a); // undefined
console.log(b.a); // {x : 2}

第一行和第二行执行完之后:

  1. a 和 b都指向{x:1}这块内存
    第三行代码相当于:
a.a = a ;
a = {x: 2};

a.a = a执行之后:

a.a = { x : 1 }
a = { x : 1 , a: { x : 2 } };
b = { x : 1 , a: { x : 2 } };

a = {x: 2};执行之后:

a = { x : 2 };
b = { x : 1 , a: { x : 2 } };

所以不难看出a.a的值和b.a的值,掌握了原理之后一切都变得明了啦!

如何判断对象的类型

  1. typeof obj
    适用于基本类型
  2. obj instanceof Object
    适用于引用类型的弱检查
  3. Object.prototype.toString.call(obj)
    适用于引用类型的强检查
上一篇下一篇

猜你喜欢

热点阅读