이 분야에 대한 지식 수준을 테스트할 수 있습니다.
질문의 마지막에는 원블로거의 글과 댓글을 참고하여 제가 주제를 분석한 내용이 있으며, 모두가 답을 얻기 위해 경쟁하고 있습니다.
퀴즈:
1:
1 && 3
2:
1 && "foo" || 0
3:
1 || "foo" && 0
4:
(1,2,3)
5:
x = {shift:[].shift}
x.shift() 3: x.length; >6:
{foo:1}[0]
7:
[참, 거짓][ 참, 거짓]
8:
'52'.split(' ')[0]
9:
a: b: c: d: e: f: g: 1, 2, 3, 4, 5
10:
{a: 1, b: 2}[["b"]]
1
"b" 45
12:
{a:{b:2}}
13:
(함수(){}())
14:
[1,2,3,4,5][0..toString.length]
15:
({} 'b' > {} 'a')
16:
Number.prototype.x = function(){ return this === 123 }; ;
17:
Array(2).join()
18:
vars: var vars = vars
19:
{ foo = 123 }
20:
x = 1; (function(){return x; var x = 2;}())
2
delete [].length;
22: >RegExp.prototype.toString = function() {return this.source};
/3/-/2/
23:
{break;4;}
24:
'foo' == new function(){ return String('foo') };
25:
'foo'.split('') []
분석:
1: #1. //3: 1은 true이고 && 연산은 오른쪽의 표현식을 계속 실행하며 결과는 3
2: //"foo"입니다. : 논리 연산자, 위와 동일하게 연산이 "foo"에 도달하면 표현식이 성공하고 || 오른쪽의 표현식이 더 이상 실행되지 않습니다.
3: //1: 1이 변환됩니다. to bool이고 true이고 직접 반환됩니다. 그런 다음
4: #4. //3: 항상 마지막 값을 반환합니다.
5: #5 //0: x가 Shift()를 실행할 때 x는 길이 속성을 가지며 반환된 값은 0입니다.
6: #6. //[0] : 두 표현식, 마지막 표현식의 결과를 반환합니다.
7: //true. : bool에 대해 연산을 수행하면 결과는 1 또는 0이 [true,false][1,0]이고 이 수식은 항상 마지막 값인 [true,false][0]를 사용합니다.
8: //. 6: .연산자 우선순위 수준이 연산자 '52'.split('')->['5','2']보다 크면 5를 얻습니다.
9: / /5: 앞의 All :x 를 무시합니다: a:1,2,3,4,5 결과: 5
10: #10. 아마 놀라실 겁니다. 이 데이터가 json 형식이 아닌가요? 왜 오류가 보고되나요? 사실 이건 자바스크립트 객체가 아니라 블록 수준 구조의 명령문 실행이거든요. 할당문이 없기 때문이죠. 일반 문으로 실행하면 {a:1;b:2}가 정확합니다. 또는 a={a:1,b:2}
11: #11. //"b45": 문자열과 숫자를 추가하면 항상 문자열이 반환됩니다.
12: #12: 두 개의 명령문입니다. 실제로는 질문 9 a:b:2, return 2
13: #13. //undefine: 익명의 빈 함수가 자체적으로 실행됩니다. return 문이 표시되지 않기 때문에 자동으로 정의되지 않은 값을 반환합니다.
14: #14. //2: 매우 흥미롭습니다. 두 부분으로 나눠서 이야기해보겠습니다. 먼저 0..toString에 대해 이야기해 보겠습니다. 정수 뒤에 "."을 추가하면 JavaScript는 그것이 속성 호출의 포인트가 아니라 부동 소수점 숫자의 포인트라고 생각합니다. JavaScript는 이 시간을 구별할 수 없기 때문에 사용자는 무엇을 하려고 합니까? 그래서 0..은 호출 속성이 됩니다.(이것은 제 추측입니다.) 이때 0.은 객체로 변환되고 해당 toString 함수가 호출됩니다. 0.toString을 직접 사용하면 구문 오류가 발생합니다. 1.1.toString;.0.toString 등을 테스트할 수 있으며 모두 호출 가능합니다. 0..toString.length의 결과에 대해 이야기해 보겠습니다. 1. 왜 1입니까? 함수의 길이 속성을 호출하여 반환된 결과는 함수의 형식 매개 변수의 기본 개수입니다. JavaScript의 .toString 함수는 1입니다. 따라서 [1,2,3,4,5][1]의 결과는 2입니다.
15: #15. //true: {} "b" 객체와 문자열이 추가됨 -> "[object Object]b", 그리고 "b" > "a" 논리 비교가 수행됩니다. {} "b"를 직접 테스트하지 마세요.
NaN을 얻게 됩니다. 그렇다면, 먼저 {} 문 블록을 실행한 다음 "b"를 실행하세요.
16: #16. //false 엄격한 비교, 왼쪽에 개체, 오른쪽에 숫자, 유형 불일치.
17: #17. //'','': 조인을 사용하여 배열을 문자열로 변환했지만 빈 배열이므로 위와 같은 결과가 나옵니다.
18: #18. //undefine: 모두 젓갈입니다. 아무리 뒤져봐도 젓갈입니다. 그것들은 모두 정의되지 않았고, 물론 결국에는 여전히 정의되지 않았습니다.
19: #19. //123: 명령문 실행을 차단합니다. 그녀는 파트너인 Shenma와 약간의 관련이 있습니다.
20: #20. //undefine: JavaScript가 블록 범위를 도입할 때마다 블록 범위의 "var"를 스캔하고 var life가 포함된 변수 값을 정의되지 않은 것으로 설정한다고 합니다. 함수 본문을 포함하여 클래스 선언이 이전에 수행되었습니다.
21: #21. //false: 머리카락을 삭제해도 되나요? [delete는 속성을 삭제할 수 없는 경우에만 false를 반환합니다.]
참조: http://perfectionkills.com/understanding-delete/ 이 기사에서는 내장 함수의 일부 속성을 삭제할 수 없다는 점을 매우 명확하게 설명합니다. 인수,
길이, 함수의 지역 변수(function(){ var a = 1; return delete a })() 등과 유사합니다.
22: #22. //1: 먼저 정규식의 프로토타입 체인에서 toString 함수를 수정하여 현재 정규식 인스턴스 개체의 텍스트 형식을 반환합니다. 그런 다음 문자열을 빼면 계산을 위해 자동으로 숫자로 변환됩니다.23: #23. // 구문 오류: break 문은 루프 및 스위치 분기 문에만 배치할 수 있습니다. 24: #24. //false: Damian Wielgosik의 매우 고전적인 설명을 빌리십시오. (new function(){ return String('foo') ; }).toString() != 'foo'
25: #25. //"f,o,o": 문자열을 배열로 변환한 후 배열에 추가한 후 문자열로 변환합니다. 두 가지를 찾을 수 있습니다. Damian Wielgosik의 설명을 빌려 배열을 추가해 보세요.
예를 들어 [1, 2] [3, 4]를 고려하여 배열이 문자열로 변환되는 방식을 확인하세요.