Javascript:看起来像typeof';行不通

Javascript:看起来像typeof';行不通,javascript,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

我只想在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
有人能告诉我为什么两次我的“未定义”测试都告诉我没有定义吗

提前感谢

,因为在JS中不是字符串,而是全局对象的属性,您可以使用
=
按类型进行比较

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

1 === "1" // false
1 == "1"  // true
试试这个:

console.log(( typeof this.value[seperator] === "undefined"));
运算符将变量类型转换为字符串,只有这样您才能检查变量是否等于字符串
未定义的

在第二段代码中:

if(typeof(this.value[seperator] === "undefined")){
在变量外部使用
typeof
运算符,因此代码首先检查
这个值[separator]==“undefined”
然后它会向您返回
false
,然后通过“typeof false”进行检查,它会为您返回
布尔值

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

if( "boolean" ){
这总是
真的
,因为字符串不是空的。

因为在JS中不是字符串,它是全局对象的属性,您可以使用
=
按类型进行比较

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

1 === "1" // false
1 == "1"  // true
试试这个:

console.log(( typeof this.value[seperator] === "undefined"));
运算符将变量类型转换为字符串,只有这样您才能检查变量是否等于字符串
未定义的

在第二段代码中:

if(typeof(this.value[seperator] === "undefined")){
在变量外部使用
typeof
运算符,因此代码首先检查
这个值[separator]==“undefined”
然后它会向您返回
false
,然后通过“typeof false”进行检查,它会为您返回
布尔值

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

if( "boolean" ){
这总是
正确的
,因为字符串不是空的。

简短回答:

“未定义”
!=<代码>未定义

检查是否有未定义的

> var foo = { foo: 'foo' };
> foo['bar']
undefined
> typeof(foo['bar'])
"undefined"
还要注意,
typeof(this.value[separator]==“undefined”)
表示
typeof(boolean)
,因为它首先计算表达式(
this.value[separator]==“undefined”
),然后获得该表达式的类型

您可能是指
typeof(this.value[separator])==“undefined”

简短回答:

“未定义”
!=<代码>未定义

检查是否有未定义的

> var foo = { foo: 'foo' };
> foo['bar']
undefined
> typeof(foo['bar'])
"undefined"
还要注意,
typeof(this.value[separator]==“undefined”)
表示
typeof(boolean)
,因为它首先计算表达式(
this.value[separator]==“undefined”
),然后获得该表达式的类型


您的意思可能是
typeof(this.value[separator])==“undefined”

您的括号在这一行的错误位置:

if(typeof(this.value[seperator] === "undefined")){
你正在做的是
的类型(这个.value[separator]==“undefined”)
-这是一个布尔条件(将返回
true
false
),所以我希望
typeof
会给你
“boolean”
。然后您的
if
语句条件是字符串
“boolean”
,因为它不是零长度,所以在JavaScript中被认为是真的

你想要的是:

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

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

if(typeof(this.value[seperator] === "undefined")){
你正在做的是
的类型(这个.value[separator]==“undefined”)
-这是一个布尔条件(将返回
true
false
),所以我希望
typeof
会给你
“boolean”
。然后您的
if
语句条件是字符串
“boolean”
,因为它不是零长度,所以在JavaScript中被认为是真的

你想要的是:

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

耶,谢谢你!就是这样!:)但是为什么ff和chrome通过console.log(typeof(typeof(aaa))告诉我返回的undefined是一个字符串?为什么stackoverflow认为我不能在10分钟内得到正确答案?@Hansinger因为它第一次检查
typeof(aaa)
和返回字符串
“undefined”
,然后你尝试检查
typeof“undefined”
然后返回
“string”
是的,谢谢!就是这样!:)但是为什么ff和chrome通过console.log(typeof(typeof(aaa))告诉我返回的undefined是一个字符串?为什么stackoverflow认为我不能在10分钟内得到正确答案?@Hansinger因为它第一次检查
typeof(aaa)
和返回字符串
“undefined”
,然后你尝试检查
typeof“undefined”
并返回
“字符串”