Javascript中容易被忽略的细节-1 对象(1)

1. 对象字面量中的属性key如果是javascript非既存关键字,可以用双引号括起来,也可以不括,如果是既存关键字,必须用双引号。

2. 对象里面值的检索:

var stooge = {
		"first-name": "aaa",
		"aaa-bbb": "bbb",
		ttt: "fff"
	};

	alert(stooge["first-name"]);
	alert(stooge["aaa-bbb"]);
	alert(stooge.ttt);
	alert(stooge["ttt"]);
        alert(stooge.name || "none");
        alert(stooge.name && stooge.name.aaa);

有特殊字符的属性名只能通过[""]的方式访问,而且定义时必须用“”引用,一般的属性同时可以通过stooge.ttt和stooge["ttt"]两种方式访问

默认值填充:stooge.name || “none”,stooge.name为undefined时,默认值为”none”

尝试对undefined变量检索会抛出TypeError异常,可以用&&避免异常,stooge.name && stooge.name.aaa(出异常的要放到后面)

3. 对象通过引用传递
    var x = stooge; 表示指向同一对象,属性值完全一样。

4.原型

   

if(typeof Object.beget !== "function"){
		Object.beget = function(o){
			var F = function(){};
			F.prototype = o;
			return new F();
		}
	}

	var new_stooge = Object.beget(stooge);
	new_stooge["first-name"] = "ttt";
	new_stooge.ttt = "yhn"

	alert(stooge["first-name"]);
	alert(stooge.ttt);
        stooge.haha = "yyy";
        alert(new_stooge.haha);

可以看出虽然设置了在原型stooge链接的新对象new_stooge,但对新对象属性的修改不会影响到原型对象。

原型对象的新属性对其所有的原型链对象共享。比如c的原型对象是b,b的原型对象是c,如果c.aaa在c找不到,会到b找,如果b找不到再到c找,如果还找不到,就是undefined,这个过程叫委托。