JavaScript的语法有多坑,算是众人皆知了。
先来上张图
代码如下:
{} + []; // 0 [] + {}; // "[object Object]" {} + [] == [] + {}; // false ({} + [] == [] + {}); // true
这么蛋疼的语法坑估计也只有 JavaScript 这样的奇葩才有。
相信对于绝大部分不研究 JavaScript 编译器的童鞋,根本无法理解。(至少我也是觉得不可思议)
后来专门去度娘了一下,才有点恍然大悟!
下面,我们先看看这个代码:
{ a: 1 }
相信大部分童鞋,第一眼都会认为这是一个 对象直接量 。
那这个代码呢?
{ var a = 1; }
浏览器会提示语法错误吗?
显然不会!细想一下,我们就会明白到,这是一个 语句块 。
if (isNumber) { var a = 1; }
那 JavaScript 的编译器是怎么处理这个二义性的?
了解决这个问题,ECMA 的方法十分简单粗暴:在语法解析的时候,如果一个语句以「{」开头,就只把它解释成语句块。
这真心是一个坑爹的处理方式!
那既然都是语句块,那为什么 {a:1} 却没有语法错误?
其实在这里,a 被解析器理解为了 标签。标签 是用来配合 break 和 continue 语句作定向跳转的。
因此,这样的写法就会抛出异常:
{ a: function () {} }
因为 function () {} 不是函数声明,也不是函数表达式。
到这里,大家应该对 {} 的奇葩处理有了基本的概念。我们再看回文章开始所提到的几条语句:
{} + []; // 0 [] + {}; // "[object Object]" {} + [] == [] + {}; // false ({} + [] == [] + {}); // true
第一条,因为 {} 是 语句块,代码可以理解为:
if (1) {} +[]
所以返回值是 0 。
第二条,由于 {} 并不在语句的开头,所以是一个正常的 对象直接量,空数组和空对象直接相加,返回 "[object Object]" 。
理解了第一第二条,第三条已经无需解释了。
第四条,因为是 () 开始,第一个 {} 被解析为 对象直接量 ,因而两条公式相等,返回 true。
字符编码,在编程中,是一个让学习者比较郁闷的东西,比如一个str,如果都是英文,好说多了。但恰恰不是如此,中文是我们不得不用的。所以,哪怕是初学者,都要了解并能够解决字符编码问题。 >>> name = '老齐' >>> name 'xe8x80x81xe9xbdx90' 在你的编程中,你遇到过上面的情形吗?认识最下面一行打印出来的东西吗?看人家英文,就好多了 >>> name = "qiwsi
本文向大家介绍JavaScript 异常处理 详解,包括了JavaScript 异常处理 详解的使用技巧和注意事项,需要的朋友参考一下 前端工程师都知道 JavaScript 有基本的异常处理能力。我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常。但估计绝大多数前端工程师都没考虑过收集这些异常信息 反正只要 JavaScript 出错后刷新不复现,那用
本文向大家介绍JavaScript字符串处理(String对象)详解,包括了JavaScript字符串处理(String对象)详解的使用技巧和注意事项,需要的朋友参考一下 定义字符串(String)对象 JavaScript String 对象用于处理文本字符串。创建 String 对象语法如下: 以上三种方法中,只有第一种是使用 String 构造函数严格的定义一个字符串对象,返回的也是一个对象
本文向大家介绍跟老齐学Python之坑爹的字符编码,包括了跟老齐学Python之坑爹的字符编码的使用技巧和注意事项,需要的朋友参考一下 字符编码,在编程中,是一个让学习者比较郁闷的东西,比如一个str,如果都是英文,好说多了。但恰恰不是如此,中文是我们不得不用的。所以,哪怕是初学者,都要了解并能够解决字符编码问题。 在你的编程中,你遇到过上面的情形吗?认识最下面一行打印出来的东西吗?看人家英文,就
本文向大家介绍详解javascript中的事件处理,包括了详解javascript中的事件处理的使用技巧和注意事项,需要的朋友参考一下 一.事件传播机制 客户端JavaScript程序(就是浏览器啦)采用了异步事件驱动编程模型。当文档、浏览器、元素或与之相关的对象发生某些有趣的事情时,Web浏览器就会产生事件(event)。如果JavaScript应用程序关注特定类型的事件,那么它可以注册当这
本文向大家介绍javascript表单事件处理方法详解,包括了javascript表单事件处理方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了javascript处理表单事件的常用方法,供大家参考,具体内容如下 1、访问表单对象的常用方法: ①:根据<form>元素的id属性; var myform=document.getElementById("myformid");