Heim  >  Artikel  >  Web-Frontend  >  eine Zeile Codeserie

eine Zeile Codeserie

高洛峰
高洛峰Original
2016-11-21 15:35:421130Durchsuche

1. Visuelles CSS-Box-Layout mit einer Codezeile

[].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})

Quellcode-Interpretation

Zuerst formatieren wir den Code:

[].forEach.call($$("*"),
    function(a){
        a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)
    }
)

1 Das DOM-Element
$$() aller Seiten entspricht document.querySelectorAll(), das ein Array von NodeList-Objekten zurückgibt. Fast alle modernen Browser unterstützen
2. Schleife durch DOM-Elemente
$$("*. ") `Konvertieren Sie alle `DOM`-Elemente in `NodeList`-Objekte, aber dies ist kein JS-Array, daher können Sie die `$$("*").forEach()-Methode nicht direkt zum Iterieren verwenden, aber wir können oder aufrufen Die apply-Methode verwendet forEach
[].forEach.call ist äquivalent zu Array.prototype.forEach.call, aber ersteres hat weniger Bytes
3. Warum nicht stattdessen border verwenden? ? Der Grund für die Verwendung von Umrissen liegt darin, dass sich der Rahmen innerhalb des CSS-Boxmodells befindet und das Gesamtlayout der Seite beeinflusst, während sich der Umriss außerhalb des CSS-Boxmodells befindet und keinen Einfluss auf das Layout der Seite hat
4. Generieren Sie eine Zufallsfarbfunktion

(~~(Math.random()*(1<<24))).toString(16)
Zufälliges Farbintervall:

Minimum: 000000, in Dezimalzahl umgewandelt ist 0

Maximum: ffffff, in Dezimalzahl umgewandelt ist 256*256*256 = 16777216 = (1

Math.random() gibt eine Gleitkommazahl zwischen 0 und 1 zurück. Math.random()*(1Rendering

eine Zeile Codeserie

Klicken Sie zur Vorschau

https://gist.github.com/addyosmani/fd3999ea7fce242756b1

2. Eine Zeile JS-Code, die B

Die obige magische Codezeile wird ausgeführt. Der Effekt ist unerwartet. Bitte sehen Sie sich das Bild unten an:
(!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]]*~+[]]


eine Zeile CodeserieInterpretation des Quellcodes

Das Wichtigste Die beteiligten Wissenspunkte sind die Priorität von JS-Operationen und die Funktion der JS-Typkonvertierung

Ergänzendes Wissen:


`~~`位运算符,进行类型转换,转换成数字,等同于`Math.floor()`,将浮点数变成整数
首先我们看`(!(~+[])+{})`
`+[]` => `+""` => `0`
`~+[]` => `-1`
`!(~+[])` => `false`
`(!(~+[])+{})` => `"false[object Object]"`
接着看`[--[~+""][+[]]*[~+[]]+~~!+[]]`
`[+[]]` => `[0]`
`[~+""]` => `[~0]` => `[-1]`
`[~+""][+[]]` => `[-1][0]=>-1`
`--[~+""][+[]]` => `-2`
`[~+[]]` => `[-1]`
`--[~+""][+[]]*[~+[]]` => `-2*[-1]` => `2`
`~~!+[]` => `~~!0` => `~~true` => `1`
`[--[~+""][+[]]*[~+[]]+~~!+[]]` => `[2+1]` => `[3]`
这样左侧`(!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]` => `"false[object Object]"[3]` => `"s"`
再看右侧`({}+[])[[~!+[]]*~+[]]`
`({}+[])` => `"[object Object]"`
`[~!+[]]` => `[~!0]` => `[~true]` => `[-2]`
`~+[]` => `-1`
`[[~!+[]]*~+[]]` => `[[-2]*-1]` => `[2]`
`({}+[])[[~!+[]]*~+[]]` => `"[object Object]"[2]` => `"b"`

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn