程序员社区

通过一行代码学javascript

[].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进制。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 通过一行代码学javascript

一个分享Java & Python知识的社区