1.变量的类型
-
原始值 : 6种 (值类型 : 按值访问)
String、 Number、Boolean、Undefined、Null、 Symbol -
引用值:(引用类型 : 按引用访问)
是什么 : 保持在内存中的对象
操作方法: JavaScript不允许直接访问内存位置,因此也就不能直接操作对象所在的内存空间;对象名->根据引用(指针)到达内存位置->执行修改
//reference :v 引用 n参考
2.动态属性
引用值而言,可以随时添加、修改和删除其属性和方法。
若key不存在,返回undefined
3.复制值
原始值: 复制实际值
引用值: 复制指针
4.传参
ECMAScript中所有函数的参数都是按值传递的。
变量有按值和按引用访问,而传参则只有按值传递。
原始值 : 传递实际值
引用值 : 传递指针的值
function setName(obj) {
obj.name = "Nicholas"; //obj和person 存储的指针指向同一地址
obj = new Object(); //obj存储的指针指向了新对象的内存位置
obj.name = "Greg"; //指针指向的位置不同,obj不影响person
}
let person = new Object();
setName(person);
console.log(person.name); // "Nicholas"
5.检测类型
-
typeof可以检测的类型
除了null之外的值类型
除了function之外的引用类型 + null ,都是’object’ ;
typeof functionName 为 ‘function’ -
instanceof 只检测对象
所有引用值都是Object的实例,因此通过instanceof操作符检测任何引用值和Object构造函数都会返回true。类似地,如果用instanceof检测原始值,则始终会返回false,因为原始值不是对象。
为什么? 因为instanceof是顺着原型链一层层的往上找的.
console.log(person instanceof Object); // 变量person是Object吗?
console.log(colors instanceof Array); // 变量colors是Array吗?
console.log(pattern instanceof RegExp); // 变量pattern是RegExp吗?