web开发人员的专业javascript告诉我们如何将对象转换为数字,这是一个错误吗?
看看下面的代码,它应该输出什么web开发人员的专业javascript告诉我们如何将对象转换为数字,这是一个错误吗?,javascript,type-conversion,Javascript,Type Conversion,看看下面的代码,它应该输出什么 让obj=Object.create(null); obj.valueOf=函数(){console.log('hit valueOf!');返回“TO BE NaN”;}; obj.toString=函数(){console.log('hit-toString!');返回“1”;}; 编号(obj) // ? 根据专业javascript,valueOf函数返回“to BE NaN”,并将其转换为NaN,然后调用toString函数 数字转换 当应用于对象
让obj=Object.create(null);
obj.valueOf=函数(){console.log('hit valueOf!');返回“TO BE NaN”;};
obj.toString=函数(){console.log('hit-toString!');返回“1”;};
编号(obj)
// ?
根据专业javascript,valueOf函数返回“to BE NaN”,并将其转换为NaN,然后调用toString函数
- 数字转换
让obj=Object.create(null);
obj.valueOf=函数(){console.log('hit valueOf!');返回“TO BE NaN”;};
obj.toString=函数(){console.log('hit-toString!');返回“1”;};
编号(obj)
//击中目标!
//楠
web开发人员的专业javascript告诉我们对象如何转换为数字是错误的吗?number(value)
,根据规范,ToNumeric(value)
,返回ToPrimitive(value,number)
。第二个参数是preferredType
,:
如果提示是字符串,则
让方法名为«“toString”,“valueOf”»
否则,
让methodname为«“valueOf”,“toString”»
对于MethodName的每个元素名称,请执行以下操作
a。让方法成为现实吧?获取(O,名称)
b。如果IsCallable(方法)为true,则
Number(obj)
的情况下,实际上应该首先调用valueOf
方法
换言之,无论以下句子来自何处,都是不正确的:
当应用于对象时,将调用valueOf()方法,并根据前面描述的规则转换返回的值。如果转换结果为NaN,则调用toString()方法并应用转换字符串的规则
是的,这是你书中的一个错误 它应该读得更像1 当应用于对象时,将调用
valueOf()
方法,如果返回的值是基元值,则将根据前面描述的规则对其进行转换。如果转换结果为NaN,则返回一个对象,调用toString()
方法并应用转换字符串的规则
证明:
const obj=Object.create(空);
obj.valueOf=函数(){console.log('hit valueOf!');返回{};};
obj.toString=函数(){console.log('hit-toString!');返回“1”;};
console.log(Number(obj))
我不知道这个“面向web开发人员的专业javascript”是什么,也不知道您在说什么“错误”,但您是否尝试过阅读or或or(这是选择valueOf
或toString
的相关行为)?显然是“面向web开发人员的专业javascript”是一本书,你问它是否有错误。大概我不知道那句话的全部内容。在两种方法中,toString
和valueOf
只调用一种。不存在一种方法作为另一种方法的“后备”的行为。