-5

原始问题:我对 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 设置为一个数字。真的对不起!!

4

1 回答 1

1

我想将 startAt 设置为一个数字。

SomeClass.prototype.startAt 一个数字 ( 0)。

如果属性为“falsey”,您的get函数会显式返回:false

if(!this[prop]){return false;}

在 JavaScript 中,0""falseundefinednull都是“假的”,因此上述条件为真并导致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];
      }

我在那里做了几件事:

  1. typeof是一个运算符,而不是一个函数,所以你不要在它的操作数周围使用括号(通常)

  2. 因为"undefined"is ,所以在检查它是一个字符串!== "string"时不需要专门检查它。prop

  3. 我曾经!(prop in this)查看对象(或其原型)是否具有该属性。

  4. 我使用 . 将返回的两个条件组合false成一个if语句||

于 2013-03-08T17:14:41.997 回答