理解 JavaScript 中的 valueOf() 函数

发布于 2022-07-28 00:01:28 字数 2797 浏览 179 评论 0

这个 valueOf() function 是所有 JavaScript 对象的特殊函数。根据 Mozilla 文档 valueOf()函数 返回指定对象的原始值。

  • Boolean: true and false
  • Number: -1, 0, 3.14, etc.
  • String: 'foo''
  • Null
  • Undefined
  • Symbol: Symbol('mySymbol')

valueOf()函数应该返回一个值 typeof是上述类型之一。 这是什么 valueOf()返回 3 个常见的 JavaScript 类: String, Number, 和 Date. String#valueOf()Number#valueOf()“拆箱”对象并为您提供相应的原始字符串或数字。 Date#valueOf() 为您提供 JavaScript 时间戳

const s = new String('test');
typeof s; // 'object'
s.valueOf(); // 'test'
typeof s.valueOf(); // 'string'

const n = new Number(42);
n.valueOf(); // 42

const d = new Date('2019-06-01');
d.valueOf(); // 1559347200000

JavaScript 使用 valueOf()使用运算符比较值时的类型强制函数 ==(相对于 ===), <, >, <=, 和 >=. 例如,这里是 JavaScript 语言规范中讨论使用的部分 valueOf()为了 < 操作符

假设你有一个对象 valueOf()总是返回 0。 <==对于运营商而言,这个对象相当于原始数字 0。但是,对于 ==, 这个对象 等价于 new Number(0), 因为 JavaScript 调用 valueOf()使用时 ==比较两个对象。

class MyClass {
  valueOf() {
    return 0;
  }
}

const obj = new MyClass();

// For the purposes of `<`, `>`, `>=` and `<=`, `obj` is
// equivalent to 0.
obj < new Number(-1); // false
obj > new Number(-1); // true
obj < -1; // false
obj > -1; // true

// For the purposes of `==`, `obj` is equivalent to 0 as a primitive,
// but not 0 as a Number object. This is because both `obj` and
// `new Number(0)` are objects, so JS does not call `valueOf()`.
obj == new Number(0); // false
obj == 0; // true
0 == obj; // true

// `===` skips calling `valueOf()`.
obj === Number(0); // false

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

失与倦"

暂无简介

文章
评论
26 人气
更多

推荐作者

微信用户

文章 0 评论 0

小情绪

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

笨死的猪

文章 0 评论 0

彭明超

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文