Javascript:看起来像typeof不起作用

时间:2013-11-05 12:53:52

标签: javascript

我想在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”测试都告诉我没有定义?

提前致谢

3 个答案:

答案 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")的类型 - 这是一个布尔条件(将返回truefalse)所以我希望typeof能够给你"boolean" 1}}。然后你的if语句条件是字符串"boolean",因为它不是零长度,在JavaScript中被认为是真的。

你想要的是:

if((typeof this.value[seperator]) === "undefined") {