Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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 为什么不正确?_Javascript - Fatal编程技术网

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