每日3题(49)

Learning is a repetitive process

HTTP:HTTP 和 HTTPS 的区别

CSS:为什么要初始化CSS样式

JavaScript:再看所忽略的隐式转换

HTTP:HTTP 和 HTTPS 的区别

生动形象

CSS:为什么要初始化CSS样式

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。

JavaScript:再看所忽略的隐式转换

只摘抄一点点,一定要看原文哦

2.1.1、如果PreferredType被标记为Number,则会进行下面的操作流程来转换输入的值。

1、如果输入的值已经是一个原始值,则直接返回它
2、否则,如果输入的值是一个对象,则调用该对象的valueOf()方法,
   如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
3、否则,调用这个对象的toString()方法,如果toString()方法返回的是一个原始值,则返回这个原始值。
4、否则,抛出TypeError异常。

2.1.2、如果PreferredType被标记为String,则会进行下面的操作流程来转换输入的值。

1、如果输入的值已经是一个原始值,则直接返回它
2、否则,调用这个对象的toString()方法,如果toString()方法返回的是一个原始值,则返回这个原始值。
3、否则,如果输入的值是一个对象,则调用该对象的valueOf()方法,
   如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
4、否则,抛出TypeError异常。

既然PreferredType是可选参数,那么如果没有这个参数时,怎么转换呢?PreferredType的值会按照这样的规则来自动设置:

1、该对象为Date类型,则PreferredType被设置为String
2、否则,PreferredType被设置为Number

例子:

({} + {}) = ?
两个对象的值进行+运算符,肯定要先进行隐式转换为原始类型才能进行计算。

  • 1、进行ToPrimitive转换,由于没有指定PreferredType类型,{}会使默认值为Number,进行ToPrimitive(input, Number)运算。
  • 2、所以会执行valueOf方法,({}).valueOf(),返回的还是{}对象,不是原始值。
  • 3、继续执行toString方法,({}).toString(),返回"[object Object]",是原始值。
  • 故得到最终的结果,"[object Object]" + "[object Object]" = "[object Object][object Object]"

猜你喜欢

转载自blog.csdn.net/weixin_44194732/article/details/105782700