이번에는 JS의 암시적 변환 사용에 대해 정리해보겠습니다. JS 암시적 변환을 사용할 때 주의사항은 무엇인가요?
js의 다양한 데이터 유형 간의 비교 및 변환 규칙은 다음과 같습니다.
1. 객체와 부울 값 비교
객체와 부울 값을 비교할 때 객체를 먼저 문자열로 변환한 후 숫자로 변환하고, 부울 값을 바로 숫자로 변환합니다
[] == true; //false []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
2. 객체와 문자열 비교
객체와 문자열을 비교할 때는 객체를 문자열로 변환한 후 둘을 비교합니다.
rreee3. 사물과 숫자의 비교
객체를 숫자와 비교할 때 객체를 먼저 문자열로 변환한 다음 숫자로 변환한 다음 숫자와 비교합니다.
rreee4. 숫자 비교
문자열과 숫자를 비교할 때는 문자열을 숫자로 변환한 후 둘을 비교합니다.
rreee5. 부울 비교
문자열과 부울 값을 비교할 때는 둘 다 숫자 값으로 변환한 후 비교합니다.
rreee6. 부울 및 숫자 비교
부울 값을 숫자로 비교할 때 부울을 숫자로 변환하여 둘을 비교합니다.
[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;
두 유형을 비교할 때 동일한 유형이 아닌 경우 그림과 같이 해당 유형 변환을 수행합니다. 예를 들어 객체를 Boolean으로 비교하는 경우 object => String => Numeric Boolean = >번호.
이 외에도 "특별한 관리"가 필요한 몇 가지 사항을 살펴보겠습니다.
흥미로운 질문을 하나 살펴보겠습니다
[1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true
이 두 가지의 결과는 모두 true입니다. 첫 번째는 object=> string=> value 0 false 가 true인 경우입니다.
앞에 추가 ! 즉, Boolean 값으로 직접 변환한 다음 이를 무효화합니다. Boolean 값으로 변환하면 빈 문자열(''), NaN, 0, null 및 정의되지 않은 값이 모두 true를 반환하므로 []this[]! => true 부정은 false이므로 [] == false는 true입니다.
다음과 같이 기억해야 할 몇 가지 사항이 더 있습니다.
'1' == 1 // true
나는 그런 코드를 본 적이 있습니다. (!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]*~+[]]] = sb
, 믿을 수 있습니까? 당시 아기가 겁을 먹었습니다.
제가 처음 접했을 때 JS는 바로 '변덕스러움' 때문에 저에게 매우 혼란스러웠습니다. 아래에 요약해 보겠습니다.
7. JS 데이터 유형: 숫자, 부울, 문자열, 정의되지 않음, Null, 기호(es6에서 새로 정의됨) 및 객체(참고: 배열은 특수 객체입니다)
typeof가 반환하는 7가지 유형: 숫자 부울 문자열 객체 정의되지 않은 객체 함수
MDN은 다음과 같이 Javascript를 소개합니다. JavaScript는 약한 유형의 언어 또는 동적 언어입니다. 즉, 변수 유형을 미리 선언할 필요가 없으며 프로그램 실행 중에 유형이 자동으로 결정됩니다. 이는 또한 동일한 변수를 사용하여 다양한 유형의 데이터를 보유할 수 있음을 의미합니다
8 일반적인 암시적 변환을 살펴보겠습니다.
기본 유형:
연산자(+,-,*,/,%) 연산 시 변환 유형
ˆ ˆ ˆ "+" 연산자: ˆ ˆ ˆ ˆ
요약: 더하기 기호 연산자를 사용하면 문자열 및 기타 유형이 문자열로 변환되고, 다른 경우에는 숫자 유형으로 변환됩니다. 참고: 정의되지 않은 것은 'NaN'으로 숫자로 변환되며 NaN에 추가된 모든 숫자는 be는 NaN이다.
다른 연산자를 사용하면 기본 유형이 숫자로 변환됩니다. '1a', 'a1'과 같은 문자가 포함된 문자열 유형은 정의되지 않음과 동일하게 NaN으로 변환됩니다.
팁: (1) NaN은 자신을 포함한 어떤 값과도 동일하지 않으므로 값이 NaN인지 확인하려면 "! =="를 사용하세요.
ˆ ˆ ˆ ˆ (2) 부울 유형 false로 변환에는 다음이 포함됩니다: null, 0, '', 정의되지 않음, NaN, false ˆ ~
(3)number() 与 parseInt() 都可以将对象转化为Number类型,Number函数要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。
Object类型
当object与基本类型运算时:
var obj = { toString: function(){ return 6; }, valueOf: function(){ return 5; } }; var obj1 = { valueOf: function(){ return 'a'; }, toString: function(){ return 'b'; } };
总结: Number类型会先调用valueOf(), String类型会先调用toString(), 如果结果是原始值,则返回原始值,否则继续用toString 或 valueOf(),继续计算,如果结果还不是原始值,则抛出一个类型错误;
为什么 {} + [] = 0 ? 因为 javascript在运行时, 将 第一次{} 认为是空的代码块,所以就相当于 +[] = 0. 还有 {} +5 = 5, 同理。
总结:
1. 类型错误有可能会被类型转换所隐藏。
2. “+”既可以表示字符串连接,又可以表示算术加,这取决于它的操作数,如果有一个为字符串的,那么,就是字符串连接了。
3. 对象通过valueOf方法,把自己转换成数字,通过toString方法,把自己转换成字符串。
4.具有valueOf方法的对象,应该定义一个相应的toString方法,用来返回相等的数字的字符串形式。
5.检测一些未定义的变量时,应该使用typeOf或者与undefined作比较,而不应该直接用真值运算。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
위 내용은 JS의 일부 암시적 변환 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!