开发者问题收集

当变量定义为 null 时 typeError 为 null

2016-12-04
964

代码必须做 3 件事

  1. 获取用户的 json 输出。
  2. 获取用户状态,在线或离线(如果 data.stream === null)则用户离线
  3. 创建具有昵称和状态的用户。
  4. 将该用户推送到数组。lastData 数组

第一个问题,我得到 TypeError data.sream 为 null,即使我像示例中那样定义了 null。有些人说我可以忽略它,但我想请专业人士 - Pritam Banerjee 回答这个问题谢谢

第二个问题是用户没有被推送到数组中。只有同一个用户在数组中被推送了几次。 代码在这里 Fiddle

抱歉,问题不好,但我不知道在哪里可以问。

var mynull = null;

if (typeof mynull === null) {  // have to be   if(mynull == null)
    // my code
} 
else
  //my code
// building prototype name & status
  function userStatus(name, status) {
    this.name = name;
    this.status = status;
  } // prototype

var showUserList = ["OgamingSC2", "habathcx", "RobotCaleb", "noobs2ninjas"]
var lastData = []; // where to push users
for (var i = 0; i < showUserList.length; i++) {
  
var user = showUserList[i]; // get username from array
var useris = showUserList[i] // --//--

useris = new userStatus(user, 'Chanel is Offline');
            lastData.push(useris);
  
  console.log(lastData[i].name + '' + lastData[i].status);
  }
3个回答

您必须了解的有关 typeof 运算符的一些事项:

  1. 它始终返回一个字符串。切勿使用 === 将返回值与非字符串进行比较。

  2. 它非常糟糕,因为它并不总是返回值的类型。

  3. 例如, typeof null 返回字符串 'object'

mynullnull 进行比较的正确方法是 mynull === null

您还可以使用 mynull == null 来检测它是 null 还是 undefined

Oriol
2016-12-04

null 是 JavaScript 中一个重要的原始类型,本质上是一个表示没有值的特殊值!在 JavaScript 中,当您还不知道变量的实际值之后会是什么时,将其初始化为 null 是一种非常好的最佳实践,因为如果您最终收到错误(例如您现在收到的错误(TypeError data.sream 为 null),它会告诉您您实际上从未为变量提供有用的值。

在测试 null 时,您有几个选项,但需要记住的是,JavaScript 是松散类型的,值可以并且确实会根据您使用它们的方式改变其类型。 null 是所谓的“falsey”值,也就是说,如果您将其转换为布尔值,它会转换为 false。其他“Falsey”值包括: 0undefined""false 。几乎每个非空、非零、非未定义的值都是“真值”,并且将如果强制转换为布尔值,则转换为 true

因此,如果您真的只是想知道变量是否仍然为 null 或者它是否具有有意义的数据,您可以利用这种松散的类型,如下所示,因为 myNull 的值将转换为布尔值,以便可以评估 if 语句。

问问自己,您是否真的关心变量是否具有 确切 null 值,或者您只需要知道变量是否具有可以使用的数据?甚至可能不需要对 null 进行显式测试。

var myNull = null;
var myNull2 = null;

// We're only going to give one of the variables a value
myNull2 = "something";

if(myNull){
 // myNull is NOT null
 console.log("myNull is NOT null and has a value of: " + myNull);    
} else {
 // myNull is null
 console.log("myNull IS null and has a value of: " + myNull);      
}

if(myNull2){
 // myNull2 is NOT null
 console.log("myNull2 is NOT null and has a value of: " + myNull2);    
} else {
 // myNul2l is null
 console.log("myNul2l IS null and has a value of: " + myNull2);      
}
Scott Marcus
2016-12-04

这将不起作用,因为:

typeof null === 'object';

因此它将始终返回一个对象,因此您的代码将不起作用。

您可以尝试:

if (myNull == null){
   // your code here.
}

也可以按照 Scott 的建议尝试,但是 if else 会反过来:

if (myNull){}
Pritam Banerjee
2016-12-04