博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中圆括号()和方括号[]的一个特殊用法
阅读量:6139 次
发布时间:2019-06-21

本文共 1699 字,大约阅读时间需要 5 分钟。

缘由:

    JS这个语言实在过于灵活,当然其不足之处也有很多。当今各种开源JS脚本铺天盖地,所以很多人的编程风格一下涌到你面前,特别是那些大师级的JS编码风格与技巧。

    在最近分析NIKE这个网站源码时,看到了如下数组表达方式:

// always trusted origins, can be exact strings or regular expressionsvar 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:)。

大家对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

转载地址:http://kbkya.baihongyu.com/

你可能感兴趣的文章
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
JAVA数组的定义及用法
查看>>
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>