`
wmingjian
  • 浏览: 13187 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于一个变态的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 中...

    获取键盘输入一个中缀表达式,将它转换成后缀表达式,并输出结果

    ### 获取键盘输入一个中缀表达式,将它转换成后缀表达式,并输出结果 #### 知识点一:中缀表达式与后缀表达式的概念 - **中缀表达式**:通常我们书写的数学表达式就是中缀表达式,如`3 + 4 * 2`。在中缀表达式中,...

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

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

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

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

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

    JavaScript 正则表达式迷你书 本书是 JavaScript 正则表达式的入门级教程,旨在帮助读者快速掌握正则表达式的基本概念和应用。下面是本书的知识点摘要: 第一章:正则表达式字符匹配攻略 * 两种模糊匹配:横向...

    js解析cron表达式

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

    Java表达式求值2.0

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

    js正则表达式详解

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

    javascript正则表达式综合练习

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

    一个简单java表达式解析的程序

    Java表达式解析是编程中的一个重要概念,特别是在设计编译器、解释器或脚本引擎时。这个程序可能是为了理解并执行简单的数学或逻辑表达式,比如`2 + 3 * (4 - 5)`。在Java中实现这样的解析器,我们需要理解表达式...

    一个基于纯js实现的数学表达式客户端计算及解析的程序源码

    这个源码包是一个纯JavaScript实现的数学表达式计算与解析工具,主要包含了以下几个核心部分: 1. **数学表达式解析**: 在这个程序中,`Evaluator.js`是关键组件,它负责处理数学表达式的解析和计算。JavaScript...

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

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

    表达式二叉树的操作

    首先,**创建表达式二叉树**通常是根据一个给定的中缀表达式进行的。中缀表达式是我们常见的运算符在操作数之间的形式,如 "2 + 3 * 4"。而表达式二叉树则将这种表达式转化为一种树形结构,其中每个节点代表一个操作...

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

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

    javaScript 正则表达式详解

    在 JavaScript 中,正则表达式可以被定义为一个 RegExp 对象。每次估值时,RegExp 对象都会返回一个新对象,这意味着RegExp 是可变对象。 直接量字符模式 在正则表达式中,直接量字符模式是指任意字符,除了 ^ $ ....

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

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

    Cron表达式选择器JS插件

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

Global site tag (gtag.js) - Google Analytics