繁体   English   中英

Javascript 中的 If...else 语句抛出 TypeError

[英]If...else statement in Javascript throws an TypeError

我从 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 的原因。

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;
    };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM