摘要:一行代碼可視化盒子布局源碼解讀首先我們把代碼格式化一下選取頁面所有元素相當(dāng)于,返回的是一個對象數(shù)組,現(xiàn)代瀏覽器幾乎都支持循環(huán)遍歷元素將所有的元素轉(zhuǎn)化為對象,但這并不是一個數(shù)組,所以不能直接使用方法來進行迭代,但是我們可以通過或方法來使用等價
1、一行代碼可視化CSS盒子布局
[].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})源碼解讀
首先我們把代碼格式化一下:
[].forEach.call($$("*"), function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16) } )
1、選取頁面所有DOM元素
$$()相當(dāng)于document.querySelectorAll(),返回的是一個NodeList對象數(shù)組,現(xiàn)代瀏覽器幾乎都支持
2、循環(huán)遍歷DOM元素
$$("*")`將所有的`DOM`元素轉(zhuǎn)化為`NodeList`對象,但這并不是一個JS數(shù)組,所以不能直接使用`$$("*").forEach()方法來進行迭代,但是我們可以通過call或apply方法來使用forEach
[].forEach.call等價于Array.prototype.forEach.call,不過前者字節(jié)數(shù)更少
3、給元素添加outline
為什么不使用border而是使用outline的原因在于:border在CSS盒子模型之內(nèi),會影響頁面的整體布局,而outline在CSS盒子模型之外,不會影響到頁面的布局
4、生成隨機顏色函數(shù)
(~~(Math.random()*(1<<24))).toString(16)
隨機顏色區(qū)間:
最小:000000,轉(zhuǎn)為十進制為0
最大:ffffff,轉(zhuǎn)為十進制為256*256*256 = 16777216 = (1<<24)
Math.random()返回0~1的浮點數(shù),Math.random()*(1<<24)返回的的即是(0,16777216)之間的浮點數(shù),使用~~去除浮點數(shù)的小數(shù)部分,再通過toString(16)就轉(zhuǎn)化為十六進制的顏色值了
效果圖
原文鏈接:https://gist.github.com/addyo...
(!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]]*~+[]]
上面一行神奇的代碼,執(zhí)行效果卻出人意料,請看下圖:
主要涉及到的知識點是JS運算的優(yōu)先級以及JS的類型轉(zhuǎn)換
補充知識:
`~~`位運算符,進行類型轉(zhuǎn)換,轉(zhuǎn)換成數(shù)字,等同于`Math.floor()`,將浮點數(shù)變成整數(shù) 首先我們看`(!(~+[])+{})` `+[]` => `+""` => `0` `~+[]` => `-1` `!(~+[])` => `false` `(!(~+[])+{})` => `"false[object Object]"` 接著看`[--[~+""][+[]]*[~+[]]+~~!+[]]` `[+[]]` => `[0]` `[~+""]` => `[~0]` => `[-1]` `[~+""][+[]]` => `[-1][0]=>-1` `--[~+""][+[]]` => `-2` `[~+[]]` => `[-1]` `--[~+""][+[]]*[~+[]]` => `-2*[-1]` => `2` `~~!+[]` => `~~!0` => `~~true` => `1` `[--[~+""][+[]]*[~+[]]+~~!+[]]` => `[2+1]` => `[3]` 這樣左側(cè)`(!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]` => `"false[object Object]"[3]` => `"s"` 再看右側(cè)`({}+[])[[~!+[]]*~+[]]` `({}+[])` => `"[object Object]"` `[~!+[]]` => `[~!0]` => `[~true]` => `[-2]` `~+[]` => `-1` `[[~!+[]]*~+[]]` => `[[-2]*-1]` => `[2]` `({}+[])[[~!+[]]*~+[]]` => `"[object Object]"[2]` => `"b"`
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/80978.html
摘要:框架之間通過接口自動加載和標(biāo)準(zhǔn)的編碼風(fēng)格進行合作。該規(guī)范的精髓是把命名空間的前綴和系統(tǒng)中的目錄對應(yīng)起來。 PHP-FIG 1).即PHP Framework Interop Group。這個組織發(fā)布推薦的規(guī)范,而不是強制規(guī)范。2).PHP-FIG的使命是實現(xiàn)框架的互操作性。框架的互操作性指的是通過自動加載機制、接口和標(biāo)準(zhǔn)的風(fēng)格,讓框架互相合作。3).框架之間通過接口、自動加載和標(biāo)準(zhǔn)的編...
摘要:最終的代碼如下第二版假設(shè)有這樣一段為了保持可讀性,我希望最終輸入的樣式為其實就是匹配每行前面的空格,然后將其替換為空字符串。 基礎(chǔ)用法 let message = `Hello World`; console.log(message); 如果你碰巧要在字符串中使用反撇號,你可以使用反斜杠轉(zhuǎn)義: let message = `Hello ` World`; console.log(mes...
摘要:可以對文件進行查看創(chuàng)建等功能,可以對文件內(nèi)容進行添加修改刪除,且所使用到的函數(shù)在為,在同時支持和,但是在系列移除了函數(shù)。在及以后,又支持同時對多個文件的上下文進行管理,即原文鏈接 Python可以對文件進行查看、創(chuàng)建等功能,可以對文件內(nèi)容進行添加、修改、刪除,且所使用到的函數(shù)在Python3.5.x為open,在Python2.7.x同時支持file和open,但是在3.5.x系列移除...
摘要:輔助標(biāo)簽代碼代碼效果廢話要讓元素和輔助元素在一行,否則會出現(xiàn)水平不完全居中,當(dāng)使用時,換行會被解析成空格。 首先我們需要知道元素都有哪些種類? 內(nèi)嵌元素(display:inline;)如a,span,b,i 【一個不可定制的盒子】 [默認同行可以繼續(xù)跟同類型標(biāo)簽] [內(nèi)容撐開寬度] [不支持寬高] [不支持上下的margin和padding] [代碼換行會被解析成空] 塊...
閱讀 2371·2021-11-24 10:31
閱讀 3426·2021-11-23 09:51
閱讀 2239·2021-11-15 18:11
閱讀 2386·2021-09-02 15:15
閱讀 2452·2019-08-29 17:02
閱讀 2283·2019-08-29 15:04
閱讀 830·2019-08-29 12:27
閱讀 2853·2019-08-28 18:15