理解 JavaScript 中的 valueOf() 函数
这个 valueOf()
function 是所有 JavaScript 对象的特殊函数。根据 Mozilla 文档 , valueOf()
函数 返回指定对象的原始值。
- Boolean:
true
andfalse
- 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 技术交流群。
上一篇: 在 JavaScript 中计算标准差
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论