[英]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.