1. 隐式类型的转换
var object1 = {toString:function(){return 'object1'}, valueOf:function() {return 10}}
var object2 = {toString: function(){return 'object2'}, valueOf: function() {return 20}}
var object3 = {toString: function(){return 'object3'}, valueOf: function(){return 30}}
console.log((object1+object2+object3) + object1 +-- object1)
结果为49,这里使用就是object的隐式类型转换。
隐式类型转换主要涉及到三种类型转换:
1、将值转为原始值,ToPrimitive()。
js引擎内部的抽象操作ToPrimitive有着这样的签名:
ToPrimitive(input, PreferredType?)
input是要转换的值,PreferredType是可选参数,可以是Number或String类型。他只是一个转换标志,转化后的结果并不一定是这个参数所值的类型,但是转换结果一定是一个原始值(或者报错)。
2、将值转为数字,ToNumber()。
(1) 如果输入的值已经是一个原始值,则直接返回它
(2) 否则,如果输入的值是一个对象,则调用该对象的valueOf()方法, 如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
(3) 否则,调用这个对象的toString()方法,如果toString()方法返回的是一个原始值,则返回这个原始值。
(4) 否则,抛出TypeError异常。
3、将值转为字符串,ToString()。
(1) 如果输入的值已经是一个原始值,则直接返回它
(2) 否则,调用这个对象的toString()方法,如果toString()方法返回的是一个原始值,则返回这个原始值。
(3) 否则,如果输入的值是一个对象,则调用该对象的valueOf()方法, 如果valueOf()方法的返回值是一个原始值,则返回这个原始值。
(4) 否则,抛出TypeError异常。
PreferredType的值按照下面的规则来设置:
1、该对象为Date类型,则PreferredType被设置为String
2、否则,PreferredType被设置为Number
所以在上面的表达式中,逗号表达式显示的是最后一个表达式的结果----object3,object3+object1,则先把对象类型转换成原始值---number类型,所以最后的结果是49
2. http的缺点有哪些?
http主要存在三大缺点:
1、通信使用明文,内容有可能被窃听
2、不验证对方的身份,因此有可能遇到伪装
3、无法验证报文的完整性,数据有可能被篡改
3. 请输出下面函数的内容
var a = true
setTimeout(function() {
a = false
}, 100)
while(a) {
console.log('函数执行了')
}
该函数会一直输出‘函数执行了’,因为js是单线程,所以while循环会一直执行,setTimeout函数永远不会被执行
4. relative和absolute定位
1、relative定位只会影响自己的位置,不会影响其它元素位置和大小的变化
2、relative定位会产生一个新的定位上下文
3、absolute元素具有包裹性,可以保证子元素和父元素大小一致