原始问题:我在使用JavaScript转换时遇到问题。这是一个例子:
var obj = {
x: 0,
y: 1,
z: 2
}
var b1 = typeof (obj.x),
b2 = typeof (obj.y),
b3 = typeof (obj.z);
b1为"boolean"
,b2为"boolean"
,b3为"number"
。
我需要将变量设置为0,我需要JavaScript将其解释为数字。我尝试过转换,例如b1 = Number(“0”),但它没有帮助:(
编辑:抱歉上面的q。这是真的。 b1,b2和b3全部返回号码。这是我的实际问题。
var SomeClass = function () {}
SomeClass.prototype = {
element: {},
startAt: 0,
length: 2,
get: function (prop) {
if (typeof (prop) === "undefined" || !(typeof (prop) === "string")) {
return false;
}
if (!this[prop]) {
return false;
}
return this[prop];
}
}
var sc = new SomeClass();
alert(typeof (sc.get("startAt")) + "\n" + typeof (sc.get("length")) + "\n" + typeof (sc.get("element")));
我想将startAt设置为数字。我很抱歉!!
答案 0 :(得分:1)
我想将startAt设置为数字。
SomeClass.prototype.startAt
一个数字(0
)。
如果属性为“falsey”,则get
函数显式返回false
:
if(!this[prop]){return false;}
在JavaScript中,0
,""
,false
,undefined
和null
都是“假的”,因此上述条件将为真并导致get
返回false
。
如果您的目标是在不存在的情况下返回false
,则可以这样做:
if (!(prop in this)) { return false; }
那将检查属性是否存在于对象本身或其原型上,我怀疑它是你想要的。但是如果你只想检查对象本身并忽略原型上的属性,那就是:
if (!this.hasOwnProperty(prop)) { return false; }
如果你的目标是让get
为false
返回get : function(prop){
if (typeof prop !== "string" || !(prop in this)) {
return false;
}
return this[prop];
}
对象所没有的属性(无论是自己的属性,还是通过其原型),那么将所有这些结合起来,然后:
typeof
我在那里做了一些事情:
"undefined"
是一个运算符,而不是函数,所以你不要在它的操作数周围使用parens(通常)
由于!== "string"
为prop
,因此在检查!(prop in this)
是否为字符串时,无需专门检查。
我使用false
来查看对象(或其原型)是否具有该属性。
我使用if
将返回||
的两个条件合并为一个{{1}}语句。