缘由:
JS这个语言实在过于灵活,当然其不足之处也有很多。当今各种开源JS脚本铺天盖地,所以很多人的编程风格一下涌到你面前,特别是那些大师级的JS编码风格与技巧。
在最近分析NIKE这个网站源码时,看到了如下数组表达方式:
// always trusted origins, can be exact strings or regular expressions var alwaysTrustedOrigins = [(/\.nike.com/), (/\.nikedev.com/), (/\.nike.com.tw/), (/\.swoosh.com/), (/\.nikeid.com/), (/\.facebook.com/), (/\.rga.com/), (/\.custhelp.com/)];
使用上面定义的代码如下:
var alwaysTrusted = false, i = alwaysTrustedOrigins.length; while (i-- && !alwaysTrusted) { if (alwaysTrustedOrigins[i] instanceof RegExp) { alwaysTrusted = alwaysTrustedOrigins[i].test(remote.origin); } else if (typeof alwaysTrustedOrigins[i] == "string") { alwaysTrusted = (remote.origin === alwaysTrustedOrigins[i]); } }
显然,操作方式还是标准数组方式,但是数组元素就‘成为’两种数据类型。本质上上面表达仍然是对象类型,但是从接下来的应用代码可以看出,这种表达方式实现了两种情况下需求:
在支持RegExp对象的环境下与不支持RegExp对象的环境下。
注意:上面使用的运算会可不一样:分别是instanceof 和typeof,需要结合JS的自动类型转换进行理解才对哟!
结论:上面是一种不错的数组元素表达技巧,一下考虑了环境是否兼容RegExp对象的两种环境下的编码,有意思!
另有引文如下,供大家一并参考(引文URL:http://www.jb51.net/article/40358.htm)。
大家对JavaScript中圆括号() 和 方括号[] 的特殊用法或许有些疑问,本文就带着这些疑问为大家详细介绍下,有疑问的朋友可不要错过了哈。
(1, 2, 3);
// return 3; 很好奇,为什么会返回3?这是什么机制?圆括号起到了什么作用?
(1, 2, 3, alert )("Amazing!");
// 这里就更好玩了,居然可以直接调用alert ;经过测试,全局函数都可以通过这样调用。
下面是关于 方括号[] 的疑问:
在JS中,[]几乎就和数组画上了等号,但也有神奇的时候。
[1,2,3][1];
// return 2; 当然这种方法也经常使用,常用于数组的索引 和 调用的对象的响应属性名存放在某个变量时。
[1,2,3][1,2];
//return 3 ; 这种情况就有趣多了,和上面圆括号的情况很像,都会返回括号内的最后一个值
在(1,2,3)里,括号和逗号都是运算符,逗号运算符返回最后一个表达式的求值结果,具体规则可自己查。
("Amazing")的括号表示函数调用。
alert是一个函数对象,当它作为表达式的求值结果返回,当然可以被调用。
[1,2,3]这里的方括号是声明数组常量,紧跟[1]表示取数组元素。[1,2,3][1]意为取[1,2,3]这个数组里的第一个元素,即2(下标从0开始)
[1,2,3][1,2]=[1,2,3][(1,2)]=[1,2,3][2]=3