我从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的原因。
答案 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;
};