Javascript构造:变量*设置*但必须是* null *

时间:2011-08-15 11:56:04

标签: javascript jquery

问题是:当第一次调用switchTo(在a点)时设置了上下文变量 _curIndex

function ShowSwitcherObject( id, switchIds )
{

    this._id = id;

    this._isInited = false;

    this.isInited = function()
    {
        return this._isInited;
    };

    this._visible = false;

    this.show = function()
    {
        if( this._visible == false )
        {
            $( '#' + this._id ).show();
            this._visible = true;
            this._isInited = true;
        }
    };

    this._showSwitch = function()
    {
        $( '#' + this._switchIds[ this._curIndex ] ).show();
    };

    this._hideSwitch = function()
    {
        $( '#' + this._switchIds[ this._curIndex ] ).hide();
    };

    this.switchTo = function( index )
    {       
        if( index != this._curIndex ) // point a
        {
            if( this._curIndex != null )
            {
                this._hideSwitch();
            }

            this._curIndex = index; // point b
            this._showSwitch();
        }
    };
    this._switchIds = switchIds;
    return this;
}

有趣的是,如果我们评论 point b ,那么变量在a点是 null 。 没有外部的 _curIndex 集。它只能由 switchTo 设置。是firefox bug还是别的什么?

2 个答案:

答案 0 :(得分:2)

Javascript中未初始化的变量的值为undefined,而不是null

this.switchTo = function( index )
{       
   alert(this._curIndex === undefined);
   // ...
};

上述内容确实在第一次调用时提醒true - 这意味着_curIndex应该在此处表现。

另请注意:

alert(undefined != null);   // returns false
alert(undefined !== null);  // returns true

答案 1 :(得分:1)

从您的代码看,this._curIndex在{a>}点undefined。{/ p>

如果您需要this._curIndex为null,则必须自己将其设置为null,因为Javascript解释器不会将未初始化的变量解析为null,而是undefined

请改为尝试:

this.switchTo = function( index )
{       
    if( index != this._curIndex ) // point a
    {
        if( typeof(this._curIndex) != 'undefined' )
        {
            this._hideSwitch();
        }

        this._curIndex = index; // point b
        this._showSwitch();
    }
};