有没有可能在 JavaScript 中评估?(a== 1 && a ==2 && a==3)
true
这是一家大型科技公司提出的面试问题。它发生在两周前,但我仍在努力寻找答案。我知道我们在日常工作中从不写这样的代码,但我很好奇。
网友回答:
我无法抗拒 – 其他答案无疑是正确的,但你真的无法跳过以下代码:
var aᅠ = 1;
var a = 2;
var ᅠa = 3;
if(aᅠ==1 && a== 2 &&ᅠa==3) {
console.log("Why hello there!")
}
请注意语句中奇怪的间距(我从您的问题中复制的)。它是半角韩文(对于那些不熟悉的人来说是韩语),它是一个 Unicode 空格字符,不会被 ECMA 脚本解释为空格字符——这意味着它是标识符的有效字符。因此,有三个完全不同的变量,一个在a之后有韩文,一个在a之前有韩文,最后一个只有a。为了便于阅读,将空格替换为,相同的代码如下所示:if
_
var a_ = 1;
var a = 2;
var _a = 3;
if(a_==1 && a== 2 &&_a==3) {
console.log("Why hello there!")
}
查看 Mathias 变量名验证器上的验证。如果这个奇怪的间距真的包含在他们的问题中,我确信这是对这种答案的暗示。
别这样。认真地。
编辑:我注意到(虽然不允许开始变量)零宽度连接器和零宽度非连接器字符也允许在变量名称中 – 请参阅用零宽度字符混淆JavaScript – 优点和缺点?。
这将如下所示:
var a= 1;
var a= 2; //one zero-width character
var a= 3; //two zero-width characters (or you can use the other one)
if(a==1&&a==2&&a==3) {
console.log("Why hello there!")
}
网友回答:
如果您利用工作方式,您可以简单地创建一个带有自定义(或)函数的对象,该函数在每次使用时都会更改它返回的内容,以便它满足所有三个条件。==
toString
valueOf
const a = {
i: 1,
toString: function () {
return a.i++;
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
这样做的原因是由于使用了松散相等运算符。使用松散相等时,如果其中一个操作数的类型与另一个操作数不同,引擎将尝试将一个操作数转换为另一个操作数。如果对象在左边,一个数字在右边,它将尝试通过首先调用对象来将对象转换为数字(如果它是可调用的),否则,它将调用 .我在这种情况下使用只是因为它想到的,会更有意义。如果我从 返回一个字符串,引擎将尝试将字符串转换为一个数字,给我们相同的最终结果,尽管路径稍长。valueOf
toString
toString
valueOf
toString
网友回答:
这是可能的!
var i = 0;
with({
get a() {
return ++i;
}
}) {
if (a == 1 && a == 2 && a == 3)
console.log("wohoo");
}
这在语句中使用 getter 来计算三个不同的值。with
a
…这仍然不意味着这应该在实际代码中使用……
更糟糕的是,这个技巧也适用于使用 .===
var i = 0;
with({
get a() {
return ++i;
}
}) {
if (a !== a)
console.log("yep, this is printed.");
}
模板简介:该模板名称为【(a== 1 && a ==2 && a==3) 的计算结果能不能为 true?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。