한 줄의 코드 시리즈

高洛峰
풀어 주다: 2016-11-21 15:35:42
원래의
1082명이 탐색했습니다.

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 요소
$$()는 NodeList 객체의 배열을 반환하는 document.querySelectorAll()과 동일합니다. 거의 모든 최신 브라우저는
을 지원합니다. 2. DOM 요소를 반복합니다.
$$("* ") `모든 `DOM` 요소를 `NodeList` 객체로 변환하지만 이는 JS 배열이 아니므로 `$$("*").forEach() 메서드를 직접 사용하여 반복할 수는 없지만 호출하거나 또는 forEach
[].forEach.call을 사용하는 적용 메소드는 Array.prototype.forEach.call과 동일하지만 전자의 바이트 수는 더 적습니다
3. 대신 테두리를 사용하는 것이 좋습니다. ? 개요를 사용하는 이유는 테두리가 CSS 상자 모델 내에 있고 페이지의 전체 레이아웃에 영향을 미치는 반면 개요는 CSS 상자 모델 외부에 있으며 페이지 레이아웃에 영향을 미치지 않기 때문입니다
4. 임의 색상 함수 생성

(~~(Math.random()*(1<<24))).toString(16)
로그인 후 복사
임의 색상 간격:

최소값: 000000, 십진수로 변환 시 0

최대값: ffffff, 십진수로 변환 시 256*256*256 = 16777216 = (1<<24)

Math.random()은 0과 1 사이의 부동 소수점 숫자를 반환합니다. Math.random()*(1<<24)은 ( 0,16777216) ~ ~ 부동 소수점 숫자의 소수 부분을 제거한 후 toString(16)

렌더링

<🎜을 통해 16진수 색상 값으로 변환합니다. >한 줄의 코드 시리즈미리보기 클릭

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

2.B를 설치할 수 있는 JS 코드 한 줄

위의 마법 코드 줄 실행 효과가 예상치 못한 것입니다. 아래 그림을 참조하십시오.
(!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]]*~+[]]
로그인 후 복사


한 줄의 코드 시리즈소스 코드 해석

메인 관련된 지식 포인트는 JS 연산의 우선순위와 JS Type 변환 기능

보충 지식:


`~~`位运算符,进行类型转换,转换成数字,等同于`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"`
로그인 후 복사

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!