[].forEach.call($$("*"),function(a){
a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)
})
这段代码的效果是让全部的标签元素的外边框设置为1px的实线。
下面将具体解析每一段代码的作用。
一、$$("*")
$$("*"):是获取文档中全部的标签元素,类似于document.querySelector("*")
二、[].forEach.call($$("*"))
;[].forEach.call($$("*")),中是改变this执行并其执行数组的forEach函数,因为通过$$("*")拿到的数组是伪数组,伪数组中不存在forEach方法,所以使用call()来调用。
三、1<<24
1<<24就是将1向左移动24位,就相当于2 ^ 24,因为我们采用十六进制表示颜色,并且颜色需要6个十六进制位,所以需要向左移动4 * 6 = 24个比特位,并且需要在此基础上减一。
(1<<24 - 1)
四、Math.random()
Math.random():就是生成一个0-1之间的随机小数,Math.random()*(1<<24-1)就是生成000000-ffffff之间的随机浮点数。
五、~~
首先我们先说一下~的作用。
~3 = -(3 + 1) = -4 //所以 ~x = -(x + 1)
~~就类似于parseInt()
例如:
let a = 123.13
let b = 12.001
let c = 23.0
console.log(~~a) //123
console.log(~~b) //12
console.log(~~c) //23
六、toString(x)
toString(x):中的x表示进制数
let a = 123
let b = 12
let c = 23
console.log(a.toString(2)) //1111011
console.log(b.toString(12)) //10
console.log(c.toString(21)) //12
在本题中就是将十进制转化为16进制。