括号的特殊用法

上午稍微有点时间,回答下这些问题。同时,这些问题很容易是前端方面的面试题,如果能够理解这些题目,那么语言层面了解
JavaScript 您是过关的。
**
在开始之前,我们需要了解 EMCAScript 和 JavaScript
之前的关系。同时,建议您能够阅读下 EMCAScript 相关的内容(
[http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf]{.ul})。目前所有的现代浏览器
JavaScript 都实现了 EMCAScript 262
的约定(当然,微软至今开发的都是「非现代」的浏览器)。

有段时间没写 JavaScirpt 了,有描述不准确请指出并见谅。

(1, 2, 3);**
// return 3; 很好奇,为什么会返回3?这是什么机制?圆括号起到了什么作用?

先从 EMACScript 角度说明 Comma Operator 的定义。在上面 PDF 的 60
页,(11.14 Comma Operator) 中描述


那么可以了解到语句 1,2,3 返回的是最后个结果,也就是 3 。

(1, 2, 3, alert )(“Amazing!”);
// 这里就更好玩了,居然可以直接调用alert
;经过测试,全局函数都可以通过这样调用。

那既然了解了上面的语句了,接下来这个题目其实就简单了很多。 (1,2,3,alert)
根据上面的逗号运算符活得出是 alert 。那么 alert 是什么呢?


这个时候 EMCAScript 解析器会认为 alert 是个「引用类型(Reference
Type)」,那么它将会在当前作用域(默认为
window)去寻找这个引用类型引用的值,那么 windows.alert 自然是个函数。

那么,最后连起来就是 alert(“Amazing!”); 自然结果就出来了。

[1,2,3][1];
// return 2; 当然这种方法也经常使用,常用于数组的索引 和
调用的对象的响应属性名存放在某个变量时。

这个没什么好说的,简单的数组

[1,2,3][1,2];
//return 3 ;
这种情况就有趣多了,和上面圆括号的情况很像,都会返回括号内的最后一个值。

求解答以上的疑问,是ECMAScript设计初留下的问题,还是故意设置的特性?这样的特性有什么好处?常用于什么地方?

既然回答了这些问题了,那么方便大家理解。下面我出些问题给大家,看看大家的理解情况,请分别考虑以下语句的输出:

  • [1,2,3][0||1,2]
  • [1,2,3][1,2||3]
  • (“hello”,”world”)[1,2,3]

如果想继续深入这些「语法糖」的,您可以参考以前我总结的 [Javascript
每日测试]{.ul}

希望对您有帮助。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!