我不明白为什么此代码段中的最后一行返回false。是不是和上面一行相同?
const Statuses = Object.freeze({
UNKNOWN : 0,
OK : 1,
ERROR : 2,
STOPPED : 3
});
class myStatus extends Object{
constructor() {
super();
this.status_id = Statuses.UNKNOWN;
}
valueOf(){
return this.status_id;
}
getStatus(){
return this.status_id;
}
}
var a = new myStatus();
a.status_id = Statuses.ERROR;
console.log(a == Statuses.ERROR);
console.log(a.getStatus() === Statuses.ERROR);
console.log(a.valueOf() === Statuses.ERROR); //Isn't this the same as the line bellow?
console.log(a === Statuses.ERROR); //Why is this false but the rest are true?
http://jsbin.com/ritumesegi/edit?js,console
我认为a == Statuses.ERROR
是真的,但其他人不应该给出相同的结果吗?特别是最后的2.不是
a === Statuses.ERROR
与
相同a.valueOf() === Statuses.ERROR
答案 0 :(得分:4)
仅因为它们的类型不同,请查看以下内容:
console.log(typeof(Statuses.ERROR)); // "number"
console.log(typeof(a) ); // "object"
<强>差异:强>
==
仅评估值
===
评估值和类型。
<强>参考:强>
https://www.w3schools.com/jsref/jsref_operators.asp
答案 1 :(得分:1)
a 是myStatus对象,因此 a!== 2 ,因为它是一个对象。
a.valueOf()是2。
答案 2 :(得分:1)
使用STATUSES.ERROR
时,两个值都不会隐式转换为其他任何值。
因此,在您的代码段中,2
只是原始数字值a
,而myStatus
是===
类的实例。由于在与<div id="sidebar-profile" class="sidebar">
<div>
<h4>
<?php
$current_user = wp_get_current_user();
echo $current_user->user_login;
?>
</h4>
</div>
<?php dynamic_sidebar( 'profile' ); ?>
</div>
比较时没有转换,因此它们不相同并不奇怪,因为一个是原始值而另一个不是。