ES数据分为 原始值与引用值。
原始值
原始值:表示单一的数据。(undefined、null、boolean、number、string、symbol)
原始值动态属性
- 原始值不可改变。
- 原始值不能有属性。
let one="Tom";
one.age=20;
console.log(one,one.age) //"Tom",undefined
原始值包装类型
为了方便操作原始值,ES提供了3种特殊的引用类型: Boolean、Number和 String 。
每当用到某个原始值的方法或属性时,后台会创建一个相应的原始值包装类型的对象,从而暴露出操作原始值的各种方法。
let s1 = "hello world" ;
let s2 = s1.substr(0,5);
后台执行步骤:
- 创建一个包含了原始值的String类型的实例;
- 调用实例上的特定方法;
- 销毁该实例;
引用值
引用值:表示有多个值(原始值或其他引用值)构成的对象。
引用值(对象)可以随时添加、修改、删除其属性和方法。
let person = new 0bject( );
person.name = "John" ;
person.showMe = function () {
console.log ( "Hi,l'm " + this.name);
} ;
值传递
赋值:将值复制给变量的过程。
原始值与引用值传递的区别:本质上没有区别,都是将一个变量中保存的信息复制给另一个变量。
let obj1={value:100};
let obj2=obj1;
obj2.value=200;
console.log(obj1.value,obj2.value) //200 200
typeof( ) 主要用于检测原始值,对于引用值意义不大
let s = "Nick" ;
let b = true;
let i = 22;
let u;
console.log(typeof s) ; //string
console.log(typeof b) ; //boolean
console.log (typeof i) ; //number
console.log( typeof u) ; //undefined
let n = null;
let obj = new 0bject( );
let a = [1,2,3];
console.log( typeof n) ; //object
console.log (typeof obj); //object
console.log(typeof a) ; //object
通常采用 instanceof 操作符,判断引用值是否为某个构造函数的实例。
let obj = new 0bject( ) ;
let a = [ 1,2,3];
console.log(obj instanceof 0bject );//true
console.log(a instanceof Array ) ;//true