【问题标题】:In JavaScript, if “Strings are objects” then why not Numbers too? [duplicate]在 JavaScript 中,如果“字符串是对象”,那么为什么不是数字呢? [复制]
【发布时间】:2014-02-06 13:14:20
【问题描述】:

你可以的

"a".charAt(0);

如果你能做到,那不是很好吗:

42.isMeaningOfLife();

嗯,或者更实用的东西,比如

myNumber.round();

当然,我首先想到的就是这会消耗性能,但显然这不是 JS 编译器的工作方式。检查这个MDN article on JS strings

请注意,JavaScript 区分 String 对象和 原始字符串值。 (布尔值和数字也是如此。)

字符串字面量(用双引号或单引号表示)和字符串 从非构造函数上下文中的 String 调用返回(即,没有 使用 new 关键字)是原始字符串。 JavaScript 自动 将原语转换为 String 对象,以便可以使用 原始字符串的字符串对象方法。在上下文中 方法将在原始字符串或属性查找上调用 发生时,JavaScript 将自动包装字符串原语并 调用方法或执行属性查找。

【问题讨论】:

  • 你可以(42).isMeaningOfLife();

标签: javascript


【解决方案1】:

我相信这是支持语法的简单问题。对字符串和数字执行对象操作时,它们都被包装在各自的对象包装器中(StringNumber)。

Number.prototype.isTheMeaningOfLife = function () {
    return this.valueOf() === 42;
};

(42).isTheMeaningOfLife(); //true
42.0.isTheMeaningOfLife(); //true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 2011-01-01
    • 1970-01-01
    • 2022-01-17
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多