当变量定义为 null 时 typeError 为 null
代码必须做 3 件事
- 获取用户的 json 输出。
- 获取用户状态,在线或离线(如果 data.stream === null)则用户离线
- 创建具有昵称和状态的用户。
- 将该用户推送到数组。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);
}
您必须了解的有关
typeof
运算符的一些事项:
-
它始终返回一个字符串。切勿使用
===
将返回值与非字符串进行比较。 -
它非常糟糕,因为它并不总是返回值的类型。
-
例如,
typeof null
返回字符串'object'
。
将
mynull
与
null
进行比较的正确方法是
mynull === null
。
您还可以使用
mynull == null
来检测它是
null
还是
undefined
。
null
是 JavaScript 中一个重要的原始类型,本质上是一个表示没有值的特殊值!在 JavaScript 中,当您还不知道变量的实际值之后会是什么时,将其初始化为
null
是一种非常好的最佳实践,因为如果您最终收到错误(例如您现在收到的错误(TypeError data.sream 为 null),它会告诉您您实际上从未为变量提供有用的值。
在测试
null
时,您有几个选项,但需要记住的是,JavaScript 是松散类型的,值可以并且确实会根据您使用它们的方式改变其类型。
null
是所谓的“falsey”值,也就是说,如果您将其转换为布尔值,它会转换为 false。其他“Falsey”值包括:
0
、
undefined
、
""
和
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);
}
这将不起作用,因为:
typeof null === 'object';
因此它将始终返回一个对象,因此您的代码将不起作用。
您可以尝试:
if (myNull == null){
// your code here.
}
也可以按照 Scott 的建议尝试,但是 if else 会反过来:
if (myNull){}