Javascript:看起来像typeof';行不通
我只想在javascript对象中设置未设置的值。我的(测试)函数如下所示: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
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”
并返回“字符串”