IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:表达式求值

共 1 篇相关文章

IT 累计浏览 3,461

JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )

这篇讲的是 JavaScript 中一段看似“乱码”的神秘表达式背后的工作原理。标题 `JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] + ({} + $)[_/_] )` 实际上是一段合法的、可执行的代码,它利用了 JavaScript 独特的类型转换规则,最终生成了字符串 “JavaScript”。 作者从这个让人费解的表达式入手,逐步拆解了其中利用的核心语言特性:首先是如何通过一元运算符 `!` 和加法 `+` 将 `undefined`(`!$`)和 `NaN`(`$` 未定义时)隐式转换为字符串,再通过索引 `+$`(结果为 0)和算术运算 `_/_`(这里 `_` 代表 `/` 字符本身)巧妙地从字符串 “undefined” 和 “NaN” 中提取出特定的字母。整个过程就像一场精巧的类型戏法。 文章最巧妙的地方在于,它没有停留在炫技层面,而是揭示了这种写法背后“不按套路出牌”的逻辑。它深入浅出地展示了 JavaScript 在类型强制转换和对象属性访问时的“宽容”甚至有些“任性”的行为,这对于理解语言设计中的一些边界案例和潜在陷阱非常有帮助。读完这篇,你不仅看懂了这段代码,更能对 JavaScript 弱类型系统的复杂性和灵活性有更深一层的认识。