JavaScript中圆括号()和方括号[]的一个特殊用法

简介:

缘由:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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/)];

 

使用上面定义的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  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













本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/1663942,如需转载请自行联系原作者



相关文章
|
前端开发 JavaScript 安全
javascript:void(0);用法及常见问题解析
【6月更文挑战第3天】JavaScript 中的 `javascript:void(0)` 用于创建空操作或防止页面跳转。它常见于事件处理程序和超链接的 `href` 属性。然而,现代 web 开发推荐使用 `event.preventDefault()` 替代。使用 `javascript:void(0)` 可能涉及语法错误、微小的性能影响和XSS风险。考虑使用更安全的替代方案,如返回 false 或箭头函数。最佳实践是保持代码清晰、安全和高性能。
5930 0
|
数据采集 Web App开发 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
随着互联网的发展,网页数据抓取已成为数据分析和市场调研的关键手段。Puppeteer是一款由Google开发的无头浏览器工具,可在Node.js环境中模拟用户行为,高效抓取网页数据。本文将介绍如何利用Puppeteer的高级功能,通过设置代理IP、User-Agent和Cookies等技术,实现复杂的Web Scraping任务,并提供示例代码,展示如何使用亿牛云的爬虫代理来提高爬虫的成功率。通过合理配置这些参数,开发者可以有效规避目标网站的反爬机制,提升数据抓取效率。
974 4
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
8月前
|
JavaScript 前端开发 Java
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
柯里化是一种强大的函数式编程技术,它通过将函数分解为单参数形式,实现了灵活性与可复用性的统一。无论是参数复用、延迟执行,还是函数组合,柯里化都为现代编程提供了极大的便利。 从 Redux 的选择器优化到复杂的数据流处理,再到深度嵌套的函数优化,柯里化在实际开发中展现出了非凡的价值。如果你希望编写更简洁、更优雅的代码,柯里化无疑是一个值得深入学习和实践的工具。从简单的实现到复杂的应用,希望这篇博客能为你揭开柯里化的奥秘,助力你的开发之旅! 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
JavaScript 前端开发
JS try catch用法:异常处理
【10月更文挑战第12天】try/catch` 是 JavaScript 中非常重要的一个特性,它可以帮助我们更好地处理程序中的异常情况,提高程序的可靠性和稳定性。
552 56
|
12月前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
212 1
|
12月前
|
JavaScript 前端开发
JS中的构造函数的含义和用法
构造函数是JavaScript中用于创建新对象的特殊函数,通常首字母大写。通过`new`关键字调用构造函数,可以初始化具有相同属性和方法的对象实例,从而实现代码复用。例如,定义一个`Person`构造函数,可以通过传入不同的参数创建多个`Person`对象,每个对象都有自己的属性值。此外,构造函数还可以包含方法,使每个实例都能执行特定的操作。构造函数的静态属性仅能通过构造函数本身访问。ES6引入了`class`语法糖,简化了类的定义和实例化过程。
241 1
|
数据采集 存储 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
在现代Web开发中,数据采集尤为重要,尤其在财经领域。本文以“东财股吧”为例,介绍如何使用Puppeteer结合代理IP技术进行高效的数据抓取。Puppeteer是一个强大的Node.js库,支持无头浏览器操作,适用于复杂的数据采集任务。通过设置代理IP、User-Agent及Cookies,可显著提升抓取成功率与效率,并以示例代码展示具体实现过程,为数据分析提供有力支持。
504 2
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
JavaScript 前端开发
js的math.max的用法
js的math.max的用法
421 6
|
JavaScript
JS中的splice的三种用法(删除,替换,插入)
JS中的splice的三种用法(删除,替换,插入)
1039 4
|
JavaScript 前端开发
JavaScript用法
JavaScript用法

热门文章

最新文章