如果... Javascript中的else语句抛出TypeError

时间:2015-10-02 17:15:24

标签: javascript

我从Javascript开始,我遇到了if-else语句的问题。 我正在尝试使用私有值(_num)来使用getter和setter。

function OnlyNumbers() {
    //var _num = 123;
    var _num = "123";
    if (typeof _num === "number") {
        this.getNumber = function () {
            return _num;
        };
        this.setNumber = function (value) {
            _num = value;
            return this;
        };
    }
    else {
        console.log("It's not a number")
    }
}

var obj = new OnlyNumbers();
console.log(obj.getNumber());
//console.log(obj._num); //I wrote this value to make sure the "private" variable remains "private"

如果我执行该代码,它将在getNumber()中抛出一个TypeError,因为它是未定义的,但是如果我取消if-else,它就可以工作。 注意:我使用typeof因为我只想检查数字,这就是我使用If的原因。

1 个答案:

答案 0 :(得分:1)

var _num = "123";
if (typeof _num === "number") {

_num是一个字符串,因此typeof _num"string",这意味着您永远不会分配this.getNumber导致尝试将undefined作为导致TypeError的函数调用。

也许你应该重新构建代码,不要无声地失败,并检查所有集合。

function OnlyNumbers() {
    var _num = 0;
    this.getNumber = function () {
        return _num;
    };
    this.setNumber = function (value) {
        if (typeof value !== 'number') {
          throw new TypeError(typeof value);
        }
        _num = value;
        return this;
    };
    this.setNumber(123);
}

您也可以明确说明NaN和Infinities是否符合您的目的。

如果您想将"123"之类的值强加给数字,可以尝试

    this.setNumber = function (value) {
        _num = +value;
        return this;
    };