看到 一个论坛帖子 问到:(类似下面的代码)
var arr = [1, 2, 3]; arr.a = 'a'; arr.b = 'b';
为什么可以这样写?arr 自身到底是什么?
原因其实很简单,因为 js 里一切都是对象,array 也是 object,所以它就能做所有 object 能做的事情,比如,给它加个属性 a。
如果 Array 能那么搞,Boolean,Date, Function, Number,RegExp,String 也可以就不足为奇了。
function toStr(obj) {
return Object.prototype.toString.call(obj);
}
function addAttr(arr) {
for(var i = arr.length-1; i >= 0; i--) {
arr[i].attr = toStr(arr[i]);
}
return arr;
}
function checkAttr(arr) {
for(var i = 0; i < arr.length; i++) {
console.log(typeof arr[i], arr[i].attr);
}
}
var arr = [
new Boolean(false),
new Date(),
new Function(),
new RegExp('\\w+'),
new Number(1.0),
new String('str')];
checkAttr(addAttr(arr));
/** output >>
object [object Boolean]
object [object Date]
function [object Function]
object [object RegExp]
object [object Number]
object [object String]
*/
细心的人会发现上面都是使用 new 构造的对象,如果换成是字面方式 (literal) 定义的原生类型 (primitive) 又会是如何呢? 继续阅读“Javascript Object 杂谈”





