我在练习JavaScript时,我的一个朋友发现了以下JavaScript代码:
js prettyprint-override">document.write(('b' + 'a' + + 'a' + 'a').toLowerCase());
上面的代码回答"banana"
!有人能解释为什么吗?
('b' + 'a' + + 'a' + 'a').toLowerCase()
为了清楚起见,让我们将其分解为两个步骤。首先,我们得到带括号表达式的值,然后对结果应用toLowerCase()
函数。
'b' + 'a' + + 'a' + 'a'
从左到右,我们有:
'b'a'
返回ba,这是常规连接
ba'a'
尝试将ba与'a'
连接起来。然而,由于一元运算符
试图将其操作数转换为一个数字,因此返回值NaN,当与原始ba连接时,该值将转换为字符串,从而产生baNaN
baNaN
“a”返回香蕉。同样,这是常规连接在这个阶段,第一步的结果是香蕉。
在步骤一返回的值上应用. toLowerCase()
给出:
香蕉
在JavaScript中有许多类似的双关语,您可以查看。
'b' + 'a' + + 'a' + 'a'
...被评估为。。。。
'b' + 'a' + (+'a') + 'a'
(请参阅:运算符优先级)
('a')
尝试使用一元加号运算符将'a'
转换为数字。因为'a'
不是数字,所以结果是NaN
(“不是数字”):
'b' + 'a' + NaN + 'a'
虽然NaN代表“不是数字”,但它仍然是数字类型;当添加到字符串时,它会像任何其他数字一样连接:
'b' + 'a' + NaN + 'a' => 'baNaNa'
最后,它是小写的:
'baNaNa'.toLowerCase() => 'banana'
'a'
解析为NaN
(“非数字”),因为它强制将字符串转换为数字,而字符a
不能解析为数字。
document.write(+'a');
我有一个简单的问题,困扰了我几天:什么是香草?有些人把它称为一个框架,你可以从官方页面下载一个库。 但当我检查一些示例或TodoMVC时,它们只是使用经典的raw JavaScript函数,甚至没有包括来自官方页面的库或任何东西。此外,官方网页上的链接“docs”指向JavaScript的Mozilla规范。 我的问题是:VanillaJS是raw JavaScript吗?如果是的话,为什么人们把
本文向大家介绍Math.min() < Math.max() 返回结果是什么?为什么?相关面试题,主要包含被问及Math.min() < Math.max() 返回结果是什么?为什么?时的应答技巧和注意事项,需要的朋友参考一下 返回,因为返回,返回。 猜测的实现方式大致如下: 接受不定项参数,当参数只有一个的时候,例如,那么这个需要和(js中最小的数)进行比较,所以结果返回,哪怕传入的值再小,单个
而工作结果是:hello world 我想知道为什么
本文向大家介绍浏览器中window.length的结果是什么?为什么?相关面试题,主要包含被问及浏览器中window.length的结果是什么?为什么?时的应答技巧和注意事项,需要的朋友参考一下 神奇的问题,神奇的答案
问题内容: 什么是%在计算?我似乎无法弄清楚它的作用。 例如,它算出计算的百分比吗:显然等于0。如何? 问题答案: (取模)运算符从第一个参数除以第二个参数得出余数。首先将数字参数转换为通用类型。右零参数引发ZeroDivisionError异常。参数可以是浮点数,例如3.14%0.7等于0.34(因为3.14等于4 * 0.7 + 0.34。)模运算符始终产生与第二个操作数具有相同符号的结果(或
问题内容: 我想知道为什么没有像这样的Locale参数。 我必须首先将任何语言的文本大写。我有2个解决方案: 用 用 对于我的语言环境。两种方式具有相同的结果。 我的问题是: 由于文本可以是任何语言。我应该使用哪种方式? 为什么没有Locale参数,因为String 之间没有太多区别,并且String是字符数组。 问题答案: 在Javadoc中, 通常,应将字符映射为大写。案例映射方法比案例映射方