我想在javascript对象中设置一个值,只有在没有设置它时。我的(测试)函数看起来像:
var test = function(){
this.value = {};
this.setValue = function(seperator, newValue){
console.log((this.value[seperator] === "undefined")); //Why both times false?
if(typeof(this.value[seperator] === "undefined")){
this.value[seperator] = newValue;
}else{
//noop
}
console.log(this.value[seperator]);
}
}
var blubb = new test();
blubb .setValue("foo","bar");
blubb .setValue("foo","notme");
在js控制台中返回
false
bar
false
notme
有人可以告诉我为什么我的“undefined”测试都告诉我没有定义?
提前致谢
答案 0 :(得分:3)
因为JS中的undefined
不是字符串,所以它是全局对象的属性,您使用===
按类型进行比较。
===
不仅会比较值,还会比较它们的类型:
1 === "1" // false
1 == "1" // true
试试这个:
console.log(( typeof this.value[seperator] === "undefined"));
typeof
运算符将变量类型转换为字符串,然后才能检查您的变量是否等于字符串undefined
。
在你的第二段代码中:
if(typeof(this.value[seperator] === "undefined")){
您在变量之外使用typeof
运算符,因此您的代码首先检查this.value[seperator] === "undefined"
是否然后向您返回false
,然后通过“typeof false”检查,它将返回{ {1}}对你而言。
在最后一步中,您的代码会转换为:
boolean
这始终是if( "boolean" ){
,因为字符串不为空。
答案 1 :(得分:0)
简短回答:
"undefined"
!== undefined
请检查undefined
。
> var foo = { foo: 'foo' };
> foo['bar']
undefined
> typeof(foo['bar'])
"undefined"
另请注意,typeof(this.value[seperator] === "undefined")
表示typeof(boolean)
,因为它首先评估您的表达式(this.value[seperator] === "undefined"
),然后获取其类型。
你可能意味着typeof(this.value[seperator]) === "undefined"
。
答案 2 :(得分:0)
您的括号位于此行的错误位置:
if(typeof(this.value[seperator] === "undefined")){
你正在做(this.value[seperator] === "undefined")
的类型 - 这是一个布尔条件(将返回true
或false
)所以我希望typeof
能够给你"boolean"
1}}。然后你的if
语句条件是字符串"boolean"
,因为它不是零长度,在JavaScript中被认为是真的。
你想要的是:
if((typeof this.value[seperator]) === "undefined") {