2

我只想在未设置的情况下在 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

有人能告诉我为什么我对“未定义”的测试两次都告诉我没有定义吗?

提前致谢

4

3 回答 3

4

因为undefined在 JS 中不是字符串,它是全局对象的属性,你可以使用===.

===不仅会比较值,还会比较它们的类型:

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”检查,它将boolean为您返回。

在最后一步中,您的代码将转换为:

if( "boolean" ){

这总是true因为字符串不为空。

于 2013-11-05T12:55:18.067 回答
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"

于 2013-11-05T12:55:54.460 回答
0

您的括号在此行中的位置错误:

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

您正在执行 typeof of (this.value[seperator] === "undefined")- 这是一个布尔条件(将返回trueor false),所以我希望typeof给您"boolean". 那么你的if语句条件是字符串"boolean",因为它不是零长度,所以在 JavaScript 中被认为是真的。

你想要的是:

if((typeof this.value[seperator]) === "undefined") {
于 2013-11-05T12:59:15.667 回答