对象的补充

107 阅读2分钟
对象的获取

对象里面的.语法和[]语法的小陷阱,一定不要掉坑儿!!

var obj = {
            name:"张三",
            age:25,
            hobby:"篮球",
        }
//想要获取 obj里的name属性有两种方法(.语法和[]语法)

//1.通过"."语法
        console.log( obj.name);//不需要加引号
// 2.通过中括号
        console.log(obj["name"]);//需要加引号

通过一个变量 来获取name这个属性 能做到吗?

1、通过.语法

var obj = {
            name:"张三",
            age:25,
            hobby:"篮球",
        }
        // 1.通过.语法    后面给的变量会出现什么结果呢?
console.log(obj.str); // undefined  
console.log(obj["str"]);//undefined  
因为obj.str里的str会自动转成字符串。其实它执行等同于obj["str"]然后在obj找str属性 没有找到就会报结果是undefined;

2、通过[]语法 注意此处的中括号内部没加引号

var str="name";
var obj = {
            name:"张三",
            age:25,
            hobby:"篮球",
        }
console.log(obj[str]);// str是一个变量,那么str变量就会解析成值就等同于
console.log(obj["name"]);//执行结果  张三

//要特别注意:obj[str]和obj["str"]的区别:
//obj["str"](这个会在对象里查找一个键名为str的键值),而 obj[str](会先查找 str变量 ,然后把str变量值替换str ,然后再去对象里查找变量值的键名)。

总结:在用对象的. 语法和中括号[]语法的时候可以都转成中括号来看;对象的.语法获取会自动把后面的内容转成字符串,所有.语法后面不能给变量。

对象没有长度
//js里的小bug  检测对象类型不准确
var arr = [];
var obj = {};
console.log(typeof arr);//object
console.log(typeof obj);//object

由对象的获取是不是可以引申到怎么检测它是不是对象类型吗?

var arr = [];
var obj = {};
 if(typeof  arr.length == "undefined"){
            console.log("是对象");
        }else{
            console.log("不是对象");
}

可不可以把对象里的键名转为组成数组,计算数组的长度就是“对象的长度”

 var obj = {name:"张三",age:20,fn:function(){console.log("fn")}};
        var arr =   Object.keys(obj);  //是数组  
        //Object.keys会把对象的所有键名 放在一个数组里
        console.log(arr);//(3) ["name", "age", "fn"]
        console.log(arr.length);//3    数组的长度等于当前obj的长度