看到 一个论坛帖子 问到:(类似下面的代码)
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 杂谈”