编辑:为什么typeof(0)返回布尔值而不是数字?

EDIT: Why does typeof(0) return boolean instead of number

本文关键字:布尔值 数字 返回 为什么 typeof 编辑      更新时间:2023-09-26

原文问题:我有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 =数字("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设置为一个数字。真的很抱歉!!

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

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

如果属性为"false ",则get函数显式返回false:

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

在JavaScript中,0, "", false, undefinednull都是"false ",因此上述条件将为真,并导致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"!== "string",所以在检查prop是否为字符串时不需要特别检查。

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

  4. 我将返回false的两个条件合并为使用||的单个if语句。