如何在jQuery中检查变量是否存在?

6
有没有办法在jQuery / JavaScript中创建一个变量,如果它不存在的话?
我已经尝试过:
    if (moving.length<0) {
        moving=false;
    }

    if (moving=='undefined') {
        moving=false;
    }

但是逻辑上它都失败了,因为变量的初始检查已经是未定义的。

希望你们能帮忙 :)


编辑

第一个答案运行正常,但我对此仍有疑问。

$.fn.animation = function() {
    if (typeof moving == 'undefined') {var moving = false;};

    if(moving===false){
        var moving=true;
        console.log('test');
    };      
};


$(window).scroll(function(){
    if($(window).scrollTop() < scrollpos){
        elm.animation();
    }
    scrollpos=$(window).scrollTop();
});

在这个设置中,即使我将moving设置为true,'test'也会不断地被记录,if语句仍然被忽略。
所以我想要实现的是每次滚动元素时都检查它是否已经被动画化。如果是,则不执行动画。
基本上是一个队列。
2个回答

14

你试过了吗

if (typeof moving == 'undefined') var moving = false;

在某些情况下,我使用

var moving = typeof moving == 'undefined' ? false : moving;

这基本上是相同的,但有时对我来说更易读的方式是看到变量被设置,要么为它的原始值,要么为false(如果未声明),但第一种版本更常见。

编辑:

以下是检测滚动的方法:

var scrolled = false;

$(window).on('scroll', function() {
    scrolled = true;
});

//later

if (scrolled) {
    // do stuff
}

第一个解决方案正常工作,但我仍然有困难实现我想要的。基本上,我在窗口滚动事件上执行一个函数,它应该设置一个变量,如果这个变量被设置了,我就检查它并在“if”中将其更改为true。 - ceed
@StefanHövelmanns - 我在回答中添加了一些内容,这是你想要做的吗? - adeneo
为什么不使用 var moving = moving || false ?我在问,@adeneo,我想了解你的解决方案的区别。 - steo
话虽如此,我自己经常使用按位或操作符,但你必须知道你正在处理的内容,并且要确定它是否能按计划工作。 - adeneo
好的,所以这取决于variables内部值的复杂程度,对吧?我在考虑使用var app = app || {}的常见pattern,通常情况下,app并不是一个那么“简单”的variable,这就是为什么我要问的原因。谢谢您的澄清! - steo
显示剩余2条评论

4
if( typeof moving === 'undefined' )
{
    var moving;

    moving = false;
}

会起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接