值类型和引用类型
在js中,除了Object,其他五种基本类型都是值类型,包括String也是值类型。
注意:
- 允许给引用类型动态的添加属性值,不允许给值类型添加属性值。
// 基本类型,不能添加属性,会报错 var test = "sss"; test.name = "W"; alert(test.name);
// 引用类型,可以动态添加属性,输出正常 var test = new Object(); test.name = "W"; alert(test.name);
- 值类型是复制值,引用类型是复制指针,这个跟其他语言都是一样的,举个例子看一下就行了
// 引用类型复制指针 var a1 = new Object(); a1.name = "W"; var a2 = a1; a2.name = "H"; alert(a1.name); // 输出H
// 值类型复制值 var a1 = "W"; var a2 = a1; a2 = "H"; alert(a1); // 输出W
Object的检测类型
我们之前讲过typeof来判断类型,它是用来判断基本类型的,如果我们想知道Object对象具体是什么类型,就需要用到instanceof。
instanceof检测对象原型链上的类型信息。
给值类型使用instanceof会返回false
实例操作
- 创建实例
// 方法1 var obj = new Object(); obj.name = "T"; // 方法2,与方法1等价 var obj = {}; obj.name = "T"; // 方法3 var obj = { name : "T", age : 11 } // 方法4,属性名加不加引号最后都会转化为字符串处理 var obj = { "name" : "T", "age" : 11 }
- 使用对象传递参数,判断该属性是否存在
// 当我们使用对象作为函数参数传递的时候,因为js的对象并不需要定义,所以在使用的时候有可能某个属性没有定义就使用导致错误,我们可以使用typeof巧妙的判断 function displayInfo(args){ var output = ""; if(typeof args.name == "string"){ output += "Name: " + args.name; } if(typeof args,age == "number"){ output += "Age: " + args.age; } alert(output); }
- 使用数组的形式访问属性
// 可以使用中括号访问对象的属性 // 使用这种方式有两种场景 // 1. 属性名是变量 2.属性名中有空格等特殊字符 var person = { name: '12' }; person['name'] = '34'; console.log(person.name); // 属性名是变量 var test = 'name'; console.log(person[test]); // 属性名有特殊字符 // 注意有特殊字符的时候不能使用对象加点访问属性的方式 person['test property'] = '123'; console.log(person['test property']);