Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取num的值?_Javascript - Fatal编程技术网

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!');
}