【问题标题】:How do I check for undefined values in IE8?如何在 IE8 中检查未定义的值?
【发布时间】:2013-04-20 08:10:35
【问题描述】:

我的 javascript 中有这个:

console.log(filters);
console.log('----');
console.log(filters.max_price);

在 Chrome 中,它显示了这一点。这是预期的行为。

Object {max_price: undefined, sort_by: undefined, distance: undefined, start: undefined, num: undefined}
----
undefined 

在 IE8 中,日志显示如下:

LOG: Object Object
----
LOG: String

为什么 IE8 认为它是一个字符串?我需要知道它是否未定义。

我有很多设置默认值的代码。

if(typeof filters.max_price == undefined){ //I use this technique a lot! 
    filter.max_price = 2000; 
}

如何在 IE8 中检查 undefine-ds?我应该这样做吗?这似乎行得通(耶...),但它看起来既便宜又老套。

if(!filters.max_price || typeof filters.max_price == 'undefined'){

有没有一种简单的方法可以用下划线做到这一点?

【问题讨论】:

  • 您的意思是undefined 是“已声明但未定义”,还是undefined 是“未声明或定义”;两种不同的东西......
  • @jurgemaister 是的,我知道......但这与问题无关
  • IE8 的console 并不是那么好。在以后的IE版本中会更好,但是如果您需要在IE8中工作,您可以尝试使用Firebug Lite来代替。它将为您提供更多功能来检查您的 JS 数据等。

标签: javascript jquery object internet-explorer-8


【解决方案1】:

您可以使用这种方法,但它不会大大减少您的代码:

filters.max_price = filters.max_price || 2000;

但是,如果它是 0,这将覆盖该值。最好的方法仍然是:

if(typeof filters.max_price === 'undefined'){
    // init default
}

【讨论】:

  • === 是否比我当前版本的 == 更好? Triple === 是否适用于 IE8?
  • @TIMEX Triple 也比较类型,未定义的类型为“未定义”
  • 它不适用于 IE8。 if(typeof filters.max_price === 'undefined'){ ....IE8 没有捕捉到它。
  • >> filters.max_price = undefined >> typeof filters.max_price === "undefined" true
  • 最高价格是一个字符串?那么取值范围是多少呢?
【解决方案2】:

您可以使用保护运算符来设置默认值:

filters.max_price = filters.max_price || 2000;

要检查该值是否为数字(我认为是价格),您可以使用

if(isNaN(filters.max_price)) {
    //enter code here
}

这也会过滤掉undefined,因为它不是一个数字。

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多