原始值和引用值
以往我们通常会说 基本类型值和引用类型值
原始值六种:
- Undefined
- Null
- String
- Number
- Boolean
- Symbol
引用值:对象
动态属性
对原始值添加属性没有意义,尽管不会报错. 但是可以随时给引用值添加、修改、删除属性和方法
let person = new Object();person.name = "Nicholas";console.log(person.name); // "Nicholas"let name = "Nicholas";name.age = 27;console.log(name.age); // undefined, 这样做没有意义let name1 = "Nicholas";let name2 = new String("Matt"); // 注意理解基本包装类型name1.age = 27;name2.age = 26;console.log(name1.age); // undefinedconsole.log(name2.age); // 26console.log(typeof name1); // stringconsole.log(typeof name2); // object
复制值
原始值会全部复制, 引用值只会复制引用
let obj1 = new Object();let obj2 = obj1; // 引用类型复制obj1.name = "Nicholas";console.log(obj2.name); // "Nicholas"
参数传递
ES中所有函数都是按值传递的
// 原始值按值传递很好理解function addTen(num){num += 10;return num;}let count = 20;let result = addTen(count)console.log(count) // 20console.log(result) // 30// 引用类型按值传递不太好理解function setName(obj) {obj.name = "Nicholas";}let person = new Object();setName(person);console.log(person.name); // "Nicholas"function setName2(obj) {obj.name = "Nicholas";obj = new Object(); // 这表明函数中参数的值改变之后,原始的引用仍然没变obj.name = "Greg";}let person2 = new Object();setName2(person2);console.log(person2.name); // "Nicholas"
