3

这不是一个实际问题,我只需要一个解释。

我有以下代码:

var src = container.find('img').attr('src');
if(src === 'undefined') {
    alert('No src');
}

当我启动控制台并记录 src 时,它说它未定义但未触发警报。调试这段代码可以证明以前的行为是正确的。当我删除 if 语句中的 '' 并将未定义为类型时,会触发警报。

另一方面,在我的代码下方,我有这一段:

var pathname = (window.location.pathname).split('/');
if(pathname[5] === 'undefined') {
    alert('Something...');
}

每当控制台说 pathname[5] 未定义时,警报就会正确触发。

因此,我认为在第一种情况下 undefined 作为类型返回,而在第二种情况下作为字符串返回。这是正确的,为什么会有这样的行为?

感谢所有聪明的答案!

4

3 回答 3

2

既然src已经声明了所有你需要做的就是检查它的真实性:

if (!src) alert('no src');

如果变量可以有一个假值(空字符串,零,假),那么你应该检查两者undefinednull比如:

if (src === null || src === undefined)

或者利用类型转换,因为null == undefined

if (src == null)
于 2013-06-19T09:33:34.093 回答
1

你需要知道===operator 它不仅检查变量的值,而且检查变量的数据类型。

因此,在第一种情况下,它不会成为真的,因为在 javascriptundefined中不是字符串。

所以试试:

if(src === undefined) {
    alert('No src');
}

在第二种情况下,它仍然返回 false。这是 JsFiddle 演示

尝试这个:

var loc="/~svemirko/dreamhouse/admin/homepage/";
var pathname = (loc).split('/');

if(pathname[7] === undefined) {
    alert('Something...');
}
于 2013-06-19T09:29:34.290 回答
0

试试这种方式:

var src = container.find('img').attr('src');
if(typeof(src) === 'undefined') {
    alert('No src');
}
于 2013-06-19T09:30:24.923 回答