`
xylw
  • 浏览: 60209 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
文章分类
社区版块
存档分类
最新评论

一个变态的JS表达式

js 
阅读更多
网上看到这么一个JS表达式,求JS表达式的值(结果是"10"),并分析表达式的工作原理。
首先,我把基本的推演过程简单罗列出来,然后在后面给出详细的分析过程:

++[[]][+[]]+[+[]]
=> ++a[0]+[0]  //a=[[]]
=> ++b+[0]   //b=[]
=> ++c+[0]   //c=""
=> 1+"0"
=> "10"

在这个推演过程中,有很多的语法细节需要大家注意的:
1)运算符优先级,全面的列表这里就不贴出来了,只把用到的一些运算符优先级列出来:
[] > ++ > +
注意区分表达式中,哪个是数组下标运算符,哪个是数组直接量。
2)默认类型转换,主要涉及到一下几个:
[]  => ""
+a  => 0  //a=""
++a => 1  //a=""
注意,++""是非法表达式,因为一切JS直接量不可以被修改,++运算符需要修改变量值的。

+[]这个表达式中数组发生了默认类型转换:
Array.prototype.toString = function(){
  alert("Array::toString");
  return this.join(",");
};
alert(+[]);  //0

最后看:++c //c=[],这个表达式,[]同样发生了默认类型转换,只不过++运算符最后导致了变量+1行为发生,所以结果是1

综合起来,一共有5个数组,一个数组下标运算符,一个前缀++运算符,一个双目+运算符,两个前缀+运算符,总共发生了四次默认类型转换。
var n = 0;
Array.prototype.toString = function(){
	n++;
	return this.join(",");
};
alert(++[[]][+[]]+[+[]]);  //10
alert(n);  //4
分享到:
评论

相关推荐

    js cron 表达式生成器

    这个描述中提到的"js cron表达式生成器"是一个专门用于创建和解析`cron`表达式的JavaScript工具,它能够帮助开发者轻松地配置复杂的定时任务规则。 `cron`表达式由6或7个字段组成,每个字段代表不同的时间单位:秒...

    JavaScript正则表达式工具

    总的来说,这个JavaScript正则表达式工具结合了JavaScript的正则表达式功能和MooTools库,提供了一个友好的交互环境,让用户能够轻松学习和测试正则表达式。通过使用这个工具,开发者可以更高效地编写和调试涉及正则...

    jsep, JavaScript表达式解析器.zip

    jsep, JavaScript表达式解析器 jsep: 一个简单的JavaScript表达式解析器jsep 是用JavaScript编写的简单表达式解析器。 它可以解析JavaScript表达式,但不能解析操作。 表达式和操作之间的差异与Excel电子表格 vs 中...

    javascript正则表达式迷你书 (1).pdf

    例如,`.`字符可以匹配任何单个字符,而`[abc]`字符组可以匹配任何一个在方括号中的字符。 横向模糊匹配 横向模糊匹配是指使用特殊的字符或符号来匹配字符串中的特定模式,而不关心字符串的长度。例如,`a*`可以...

    js正则表达式笔记,直接运行

    标题与描述中的“js正则表达式笔记,直接运行”明确指出这是一份关于JavaScript正则表达式的笔记,其中包含了可以直接执行的代码示例。正则表达式在编程中是一种非常强大的工具,用于处理字符串模式匹配、搜索和替换...

    js解析cron表达式

    资源为js文件,下载后直接用script标签引入,需要解析时调用该js第一个方法,参数为cron定时器表达式字符串,例如:translateCRONToChinese("0 0 12 */1 * ?");

    js正则表达式详解

    虽然本文主要介绍了JavaScript中的正则表达式,但提到了Jakarta-ORO库,这是一个Java中用于处理正则表达式的开源库。尽管如此,对于JavaScript开发者来说,理解Jakarta-ORO库的原理和技术仍然很有帮助,尤其是在跨...

    javascript CHM帮助文档,包含一个正则表达式PPT

    在提供的压缩包中,很可能包含了一个关于正则表达式的PPT,这可能是讲解正则表达式基本概念、元字符、量词、分组、选择、位置匹配等内容的教程。PPT可能还涵盖了高级特性,如正向预查、负向预查和回溯引用等。 此外...

    易语言JS脚本组件表达式计算

    JS脚本组件就是这样一个模块,它为易语言程序提供了运行JavaScript的能力。 表达式计算是程序设计中常见的任务,无论是JavaScript还是其他语言。在JavaScript中,你可以使用内置的eval()函数来计算一个字符串形式的...

    输入一个中缀表达式,将其转换为等价的后缀表达式后输出并计算结果。

    输入一个中缀表达式,将其转换为等价的后缀表达式后输出并计算结果。

    JS脚本组件表达式计算.rar

    例如,一个表达式计算组件可能包含输入框、按钮和结果显示区域,用户输入表达式后,点击按钮触发计算并显示结果。 2. DOM操作:组件往往需要与HTML元素交互,通过DOM(文档对象模型)API,如 `getElementById`,`...

    javascript正则表达式综合练习

    JavaScript正则表达式是编程语言中的一个重要组成部分,用于处理文本模式匹配和字符串操作。这篇博客“javascript正则表达式综合练习”可能是一个实践教程或示例集合,旨在帮助开发者提升在JavaScript中使用正则...

    Cron表达式选择器JS插件

    总的来说,Cron表达式选择器JS插件为Web开发者提供了一个友好的界面,简化了Cron表达式的管理和配置,使非程序员也能轻松处理定时任务的设定。结合BootStrap的优秀设计,它为现代Web应用带来了更高效、更直观的用户...

    jS 正则表达式实现关键字高亮显示

    总之,利用JavaScript和正则表达式实现关键字高亮显示是一个涉及字符串处理、正则匹配和DOM操作的过程。通过创建合适的正则表达式模式,进行字符串替换,以及应用适当的CSS样式,我们可以有效地突出显示文本中的关键...

    Java表达式求值2.0

    "Java表达式求值2.0"可能是指一个优化过的版本,用于更高效地处理Java中的数学或逻辑表达式。这个版本可能是针对早期版本的错误进行了修复,或者增加了新的功能。 在Java中,表达式求值通常涉及以下知识点: 1. **...

    js正则表达式限制文本框只能输入数字,能输小数点.

    整个正则表达式的意思是:匹配一个可能包含小数点的数字序列,但小数点最多只出现一次。 #### 3. JavaScript代码实现 接下来,我们可以通过JavaScript来实现对文本框输入内容的验证。这里给出两种方法:一种是在...

    JS正则表达式葵花宝典

    在JavaScript中,编写一个全面的URL验证正则表达式并非易事,因为它需要考虑到各种可能的URL格式。一个基本的URL验证正则表达式可能是这样的: ```javascript /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w...

    详细简单的cron表达式校验js

    cron表达式校验,验证是否是正确的cron表达式,调用的主方法是function cronValidate(cronExpression ),有需要可以看一下

Global site tag (gtag.js) - Google Analytics