相关标签

类型转换的小乐趣

在 玉伯 的文章 《一道大题目,嘿嘿》 中有这样一段代码: [] == ![] 也许很多同学迷惑:咦,这个如何转换呢? 首先,我们了解下逻辑 NOT(!)运算与等号(==)运算的一些基本规则: 逻辑 NOT 运算中,如果运算数是对象,返回 fasle; 等号运算中,如果一个运算数是 Boolean 值,在运算前,会将其转换成数字:false -> 0,true -> 1; 等号运算中,如果一个运算数是对象,另一个是数字,在运算前,会将对象转换成数字。 2010年11月2日补充:对象不能直接转换成数字型,可以将其转换成字符型,再将字符型转换成数字型。 根据上面的一些规则,我们再来看看原来的表达式如何演变: Step01: [] == ![] // 由于[]是对象,则 ![] 返回fasle,演变为 Step02。 Step02: [] == fasle // 由于 fasle 是 Boolean 值,则转换成数字 0,演变为 Step03。 Step03: [] == 0 // 由于 0是数字,[]是对... 7 条评论 »

如何将函数的实际参数转换成数组

实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组。 值得庆幸的是,我们可以通过数组的 slice 方法将 arguments 对象转换成真正的数组: var args = Array.prototype.slice.call(arguments, 0); 对于slice 方法,ECMAScript 262 中 15.4.4.10 Array.prototype.slice (start, end) 章节有备注: The slice function is intentionally generic; it does not require that its this value be an Array object. Therefore it can be transferred to other kinds of objects [...]

... 25 条评论 »

删除数组中重复项(uniq)

首先让我们看下 YUI 是如何处理的: var toObject = function(a) { var o = {}; for (var i = 0; i < a.length; i = i+1) { o[a[i]] = true; } return o; }; var keys = function(o) { var a=[], i; for (i in o) { if (lang.hasOwnProperty(o, i)) { // YUI的方法 a.push(i); } } return a; [...]

... 36 条评论 »

有趣而诡异的数组

年前在重写淘宝旺铺里的会员卡脚本的时候,无意中发现了一个有趣的事情。代码类似: var associative_array = new Array(); associative_array["one"] = “1″; associative_array["two"] = “2″; associative_array["three"] = “3″; if(associative_array.length > 0) { // to do } 会发现 associative_array.length 始终等于 0,当时有点迷惑,后来才知道这就像大家认为 IE 中支持 CSS 属性 display:inline-block 一样,纯属巧合和误解。 实际上(引自《JavaScript “Associative Arrays” Considered Harmful》): JavaScript arrays (which are meant to be numeric) are often used to hold key/value pairs. This is [...]

... 24 条评论 »