gpt4 book ai didi

JavaScript 特性 : valueOf clarification in if statement?

转载 作者:行者123 更新时间:2023-12-03 05:00:32 25 4
gpt4 key购买 nike

问题是解决这个神奇的条件:

var magic = ???;

if(magic < 1 && magic > 1){
console.log('Inside')
}

//magic solution 1 - WORKS

var magic = (function(){
var val = -2;

return {
valueOf(){
return val = val + 2;
}
}
})();

// magic solution 2 - DOESN'T WORK

var magic = {
val: -2,
valueOf: function(){
return this.val + 2;
}
};

有人可以澄清这个片段是如何工作的吗?我以为两者是一样的。

最佳答案

这两个片段都使用了 JavaScript 的“有点神奇”的一面:当在仅对基元有意义的表达式中使用对象时(例如与数字比较),它会被 ToPrimitive() 转换为基元。操作 - 要么使用 valueOf()toString()对象本身的方法,具体取决于表达式的特殊性(更多详细信息 here )。

(magic < 1 && magic > 1)表达式这样的转换发生(至少)两次,这就是两个片段之间的区别。在第一个中,值 val每次增加 2 valueOf()叫做。顺便说一句,使用 console.log() 很容易检查:

return { 
valueOf(){
val = val + 2;
console.log(`And now it's ${val}`);
return val;
}
}

...给出以下输出:

And now it's 0
And now it's 2
inside

但是,第二个片段仅给出 this.val + 2 的结果,但从不修改this.val ,结果总是0。如果这样写:

valueOf: function(){
return this.val += 2;
}

...它的工作原理与第一个完全一样。

关于JavaScript 特性 : valueOf clarification in if statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42244562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com