Javascript 如何获取num的值?
我得到了这个密码:Javascript 如何获取num的值?,javascript,Javascript,我得到了这个密码: if (num == 100 && num== 200 && num==300) { console.log('it works!'); } 条件必须为true,以便在控制台中打印“it works!” 我这里有这些代码,我很想知道它是如何工作的。另外,valueOf和toString之间有什么区别 任何解释都将不胜感激。 谢谢 - 这有点棘手。。。。但是 if (num == 100 && num== 200 &
if (num == 100 && num== 200 && num==300) {
console.log('it works!');
}
条件必须为true,以便在控制台中打印“it works!”
我这里有这些代码,我很想知道它是如何工作的。另外,valueOf和toString之间有什么区别
任何解释都将不胜感激。
谢谢
-
这有点棘手。。。。但是
if (num == 100 && num== 200 && num==300)
每次与“num”进行比较时,此行都将对其求值
现在,这些行:
value: 0,
toString: function() { // valueOf is the 'same' almost
this.value += 100;
return this.value;
}
使用值属性和方法定义对象。
每次比较对象时,由于它不是值类型,引擎将查找“valueOf”方法,如果找不到该方法,它将尝试调用对象的“toString”方法。作为开发人员,这发生在“幕后”
现在,由于您的evaluator函数和toString实际上每次在if语句中看到num时都会将对象的“real”值增加100,因此您将其增加100。因此,当选中第一条语句时,num获取其值field+=100
,进行比较并通过。
接下来,当其num==200的时间再次增加100(在计算过程中),然后再将控制返回到比较执行,因此,当需要比较值时,也是如此。
第三次也是同样的概念
希望你明白我的意思
TLDR:因为num不是“值类型”,比较器将查找valueOf或toString(取决于它试图在语句上匹配的类型),并且您的计算器正在幕后递增该值 如果将这两个函数都添加到const中,您将看到,只调用了valueOf
。如果删除的值
,则将调用toString
。这意味着,每次尝试将对象num
与某个值进行比较时,javascript都会尝试
- 找到对象的方法
valueOf
,并调用它
- 如果找不到valueOf method,则调用对象的
toString
方法,然后将其与标量值进行比较
@ilkerkaran,但是这个表达式在这种情况下是正确的,只要你用操作符调用任何对象,这个表达式都可能重复。它调用valueOf来获取原语值。无论返回什么,操作都以该值执行。这就是它起作用的原因。请阅读这里@xdeepakv,谢谢您的解释。另外,该链接非常有用,非常感谢。我理解这个.value+=100并返回这个.value,但是value:0和toString或valueOf:function()仍然让我感到困惑。抱歉我理解得太慢,我是编程新手。在我看来,第二个示例中缺少的重要信息是调用toString
,因为在计算对象时,如果valueOf
不返回原语,则调用toString
,除非根据字符串提示比较,在这种情况下,首先调用toString
。您应该添加一个指向ECMAScript规范的链接,这些信息在那里写得很深。感谢您的简单解释。
if (num == 100 && num== 200 && num==300)
value: 0,
toString: function() { // valueOf is the 'same' almost
this.value += 100;
return this.value;
}
const num = {
value: 0,
valueOf: function () {
console.log('Called valueOf');
this.value += 100;
return this.value;
},
toString: function () {
console.log('Called toString');
this.value += 100;
return this.value;
}
}
if (num == 100 && num == 200 && num == 300) {
console.log('it works!');
}