Javascript 为什么不正确?
如果检查Javascript 为什么不正确?,javascript,Javascript,如果检查消费者==true,为什么对象不为true let consumer={ “检查”:正确, “ID”:“680e543457-999fc-11e6”, “fio”:“约翰·多伊”, “办公室”:{ “ID”:“fgh4d” }, “电话”:” }; console.log('consumer==true',consumer==true);//假的 console.log('consumer==true',consumer==true);//假的 console.log('Boolean
消费者==true
,为什么对象不为true
let consumer={
“检查”:正确,
“ID”:“680e543457-999fc-11e6”,
“fio”:“约翰·多伊”,
“办公室”:{
“ID”:“fgh4d”
},
“电话”:”
};
console.log('consumer==true',consumer==true);//假的
console.log('consumer==true',consumer==true);//假的
console.log('Boolean(consumer'),Boolean(consumer));//真的
console.log(“!consumer”,!consumer);//假的
if(consumer)console.log('1')//1
对象不能等于布尔值
但是您可以检查属性checked
在JS中,
=
和==
的意思并不相同。当您使用==
时,您会检查元素是否等于,但是==
会检查元素是否等于以及与您比较的元素的类型是否相同
exsample:
1 === 1 // true
"1" === 1 // false
"1" == 1 // true
1 == 1 // true
但是,键入
时您正在做的事情!consumer
是指您正在检查元素是否存在(并且不是未定义的、NaN
或Null
)除了@VLAZ answer之外,您还可以检查consumer对象是否存在导致布尔表达式的未定义元素
let consumer={
“检查”:正确,
“ID”:“680e543457-999fc-11e6”,
“fio”:“约翰·多伊”,
“办公室”:{
“ID”:“fgh4d”
},
“电话”:”
};
console.log('consumer!=undefined',consumer!=undefined);//真的
console.log('consumer!==undefined',consumer!==undefined);//正确
消费者==真实
这里consumer是object,true是boolean。因为==运算符将两个变量值转换为相同的类型,即使值不同。所以这是错误的
例如,如果比较1=='1',则为真。但将对象与布尔值进行比较只会是错误的
消费者===true
==不执行任何类型转换(强制),仅当两个被比较变量的值和类型相同时才返回true
例如,如果比较1=='1',则为false。如果比较1==1,则为真。但在您的例子中,如果与布尔值比较,object肯定是false
!!消费者
基本上,Not运算符(!)反转操作数的布尔结果。使用者持有一个对象,所以操作数的布尔结果将为真。不是操作员反转它。所以这是错误的
消费者持有一个对象。所以这将是真的。所以如果条件是真的。即使使用者持有空对象({}),它也仅为真。因为它有自己的财产
var a={};
a、 hasOwnProperty
感谢大家,我找到了我所需要的,也许对恩扬会有帮助。正如所说
不要将基本布尔值true和false与
布尔对象的真值和假值
而且:
作为第一个参数传递的值将转换为布尔值
值,如果需要。如果值被省略或为0,-0,null,false,
NaN、undefined或空字符串(“”),对象的首字母为
虚假的价值。所有其他值,包括任何对象、空数组
([]),或字符串“false”,创建初始值为的对象
正确
所以
您的使用者不是布尔值,因此它不等于true
。
看起来你想看看这个值是不是真的
!消费者
检查值是否有误
您可以再次执行此过程:
!!消费者检查值是否真实
对象是真实的,但不等于布尔值true
了解相关信息:=
不等于“元素存在”<代码>=
不是类型安全的,因此只比较变量的内容=
是类型安全的,并比较变量的类型和内容。“在此上下文中使用=
时,检查使用者元素是否存在”1。事实并非如此。即使假设是这样,那么这如何解释为什么consumer==true
的结果是false
?“您的consumer等于[object literal]”尽管如此,这并不是真的正确<代码>obj={foo:“bar”};obj={foo:bar}
将返回false
,因为它不等于{foo:bar}
对象的内容。对象是通过引用进行比较的,而不是通过形状或内容。很有趣!我不知道,更新了答案,谢谢!“对象不能等于布尔值。”它们可以。这个对象不能,但一般来说,它是有效的obj={valueOf(){return true;};console.log(obj==true)//正确
1 === 1 // true
"1" === 1 // false
"1" == 1 // true
1 == 1 // true
Boolean(consumer) // true