Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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,如果我有这个JavaScript var someVar = someOtherVar == null; 哪些someOtherVar值会导致someVar为真? 注意:根据我所读的,如果someOtherVar是未定义的,那么someVar将为真。但是为了使用这种比较风格,我改变了很多代码,我想确保没有其他东西会导致真实的语句(除了null和undefined) someOtherVar的哪些值将导致someVar为true 仅null和未定义 : 如果类型(x)与类型(y)相同,则返回执行

如果我有这个JavaScript

var someVar = someOtherVar == null;
哪些
someOtherVar
值会导致
someVar
为真?

注意:根据我所读的,如果
someOtherVar
未定义的
,那么
someVar
将为真。但是为了使用这种比较风格,我改变了很多代码,我想确保没有其他东西会导致真实的语句(除了
null
undefined

someOtherVar
的哪些值将导致
someVar
true

null
未定义

:

  • 如果
    类型(x)
    类型(y)
    相同,则返回执行的结果
  • 如果
    x
    null
    y
    未定义,则返回true
  • 如果
    x
    未定义
    y
    ,则返回
  • 如果
    Type(x)
    是数字而
    Type(y)
    是字符串,则返回比较结果
    x==ToNumber(y)
  • 如果
    Type(x)
    是字符串而
    Type(y)
    是数字,则返回比较结果
    ToNumber(x)==y
  • 如果
    Type(x)
    是布尔值,则返回比较结果
    ToNumber(x)=y
  • 如果
    Type(y)
    是布尔值,则返回比较结果
    x==ToNumber(y)
  • 如果
    Type(x)
    是字符串、数字或符号,而
    Type(y)
    是对象,则返回比较结果
    x==ToPrimitive(y)
  • 如果
    Type(x)
    是对象,而
    Type(y)
    是字符串、数字或符号,则返回比较结果
    ToPrimitive(x)==y
  • 返回false
  • 步骤1处理案例
    null==null
    。第2步和第3步处理案例
    null==undefined
    undefined==null
    。第6步和第7步处理另一个值为布尔值的情况,因此最后将一个数字与
    null
    进行比较。由于
    null
    不是对象、数字、字符串、布尔值或符号,因此不适用其他步骤,因此返回
    false
    (步骤10)


    在JavaScript中,什么强制来自空比较

    只有当另一个值是布尔值时,它才会被强制为一个数字,因此您最终会比较
    0==null
    1==null
    ,两者都是
    false

    在所有其他情况下,没有发生类型强制(没有任何内容强制为
    null
    ,并且
    null
    没有强制为任何其他数据类型)

    someOtherVar
    的哪些值将导致
    someVar
    true

    null
    未定义

    :

  • 如果
    类型(x)
    类型(y)
    相同,则返回执行的结果
  • 如果
    x
    null
    y
    未定义,则返回true
  • 如果
    x
    未定义
    y
    ,则返回
  • 如果
    Type(x)
    是数字而
    Type(y)
    是字符串,则返回比较结果
    x==ToNumber(y)
  • 如果
    Type(x)
    是字符串而
    Type(y)
    是数字,则返回比较结果
    ToNumber(x)==y
  • 如果
    Type(x)
    是布尔值,则返回比较结果
    ToNumber(x)=y
  • 如果
    Type(y)
    是布尔值,则返回比较结果
    x==ToNumber(y)
  • 如果
    Type(x)
    是字符串、数字或符号,而
    Type(y)
    是对象,则返回比较结果
    x==ToPrimitive(y)
  • 如果
    Type(x)
    是对象,而
    Type(y)
    是字符串、数字或符号,则返回比较结果
    ToPrimitive(x)==y
  • 返回false
  • 步骤1处理案例
    null==null
    。第2步和第3步处理案例
    null==undefined
    undefined==null
    。第6步和第7步处理另一个值为布尔值的情况,因此最后将一个数字与
    null
    进行比较。由于
    null
    不是对象、数字、字符串、布尔值或符号,因此不适用其他步骤,因此返回
    false
    (步骤10)


    在JavaScript中,什么强制来自空比较

    只有当另一个值是布尔值时,它才会被强制为一个数字,因此您最终会比较
    0==null
    1==null
    ,两者都是
    false


    在所有其他情况下,没有发生类型强制(没有任何内容被强制为
    null
    ,并且
    null
    没有被强制为任何其他数据类型)。

    看起来只有
    null
    未定义
    事实上:

    const arr=['string',true,false,0,null,未定义,NaN,{},[],4,-1,-0];
    常数r=arr.map((e,i)=>{
    返回{i,e,bool:e==null}
    }).filter(e=>e.bool);
    //返回导致“null”的元素
    //i:初始数组“arr”内的索引
    
    log(JSON.stringify(r,null,2))看起来只有
    null
    undefined
    实际上:

    const arr=['string',true,false,0,null,未定义,NaN,{},[],4,-1,-0];
    常数r=arr.map((e,i)=>{
    返回{i,e,bool:e==null}
    }).filter(e=>e.bool);
    //返回导致“null”的元素
    //i:初始数组“arr”内的索引
    log(JSON.stringify(r,null,2))根据我的理解