JavaScript 데이터 유형은 null, 정의되지 않음, 부울, 문자열, 숫자, 객체 등 6가지 유형으로 나뉩니다.
객체는 참조 유형이고 나머지 5개는 기본 유형 또는 기본 유형입니다. typeof 메소드를 사용하면 어떤 유형에 속하는지 출력할 수 있습니다. 서로 다른 유형의 변수를 비교하려면 먼저 유형을 변환해야 하는데, 이를 유형 변환이라고 합니다. 유형 변환을 암시적 변환이라고도 합니다. 암시적 변환은 일반적으로 덧셈, 뺄셈, 곱셈, 나눗셈, 같음, 작음, 큼 등의 연산자를 사용하여 발생합니다. .
typeof '11' //string typeof(11) //number '11' < 4 //false
1. 기본형 변환
먼저 덧셈, 뺄셈, 곱셈, 나눗셈에 대해 이야기해 보겠습니다.
1. 문자열에 숫자를 추가하면 숫자가 문자열로 변환됩니다.
2. 숫자에서 문자열을 빼고 문자열을 숫자로 변환합니다 . 문자열이 순수 숫자가 아닌 경우 NaN으로 변환됩니다. 문자열에서 숫자를 뺀 경우에도 마찬가지입니다. 두 문자열을 빼면 먼저 숫자로 변환됩니다.
3. 곱셈, 나눗셈, 보다 큼, 보다 작음, 뺄셈의 변환에도 동일하게 적용됩니다.
//隐式转换 + - * == / // + 10 + '20' //'2010' // - 10 - '20' //-10 10 - 'one' //NaN 10 - '100a' //NaN // * 10*'20' //200 '10'*'20' //200 // / 20/'10' //2 '20'/'10' //2 '20'/'one' //NaN
4. 덧셈 연산의 순서는 민감합니다
JavaScript는 작업 순서에 민감하기 때문에 이와 같은 혼합 표현식은 때때로 혼란스럽습니다. 예를 들어 표현식은 다음과 같습니다. 1 2 "3"; //"33"
덧셈 연산은 왼쪽 결합이므로(즉, 왼쪽 결합 법칙) 다음 표현식과 같습니다. (1 2) "3" //"33"
반대로, 1 "2" 3; //"123" 표현식은 "123" 문자열로 평가됩니다. 왼쪽 결합법칙은 식의 왼쪽에 있는 덧셈 연산을 괄호로 묶는 것과 동일합니다.
5. 다른 그룹 살펴보기 ==
1).undefine은 null과 같습니다
2) 문자열과 숫자를 비교할 때는 문자열을 숫자로 변환하세요
3) 숫자가 부울 비교인 경우 부울이 숫자로 변환됩니다
4) 문자열과 부울을 비교할 때는 둘을 숫자로 변환하세요
// == undefined == null; //true '0' == 0; //true,字符串转数字 0 == false; //true,布尔转数字 '0' == false; //true,两者转数字 null == false; //false undefined == false; //false
7개의 거짓 값: false, 0, -0, "", NaN, null 및 정의되지 않음, 다른 모든 값은 진실입니다
6. 숫자가 아닌 NaN
NaN은 특정 산술 연산(예: 음수의 제곱근 찾기)의 결과가 숫자가 아님을 나타내는 특수 값입니다. 지정된 문자열을 구문 분석할 수 없을 때 메서드parInt() 및parseFloat()는 이 값을 반환합니다. 일반적으로 유효한 숫자를 반환하는 일부 함수의 경우 이 메서드를 사용하고 Number.NaN을 사용하여 오류 조건을 나타낼 수도 있습니다.
Math.sqrt(-2) Math.log(-1) 0/0 parseFloat('foo')
많은 JavaScript 초보자에게 첫 번째 함정은 typeof를 호출할 때 반환되는 결과가 일반적으로 예상하지 못한 결과라는 것입니다.
console.log(typeof NaN); // 'Number'
이 경우 NaN은 숫자를 의미하지 않으며 유형은 숫자입니다. 알겠어요?
typeof는 문자열을 반환하므로 "숫자", "문자열", "부울", "객체", "함수", "정의되지 않음
아래에는 많은 혼란이 있으니 침착함을 유지하세요. 두 NaN을 비교해 보겠습니다.
var x = Math.sqrt(-2); var y = Math.log(-1); console.log(x == y); // false
아마도 엄격한 동등성(===) 연산을 사용하지 않기 때문일까요? 분명히 그렇지 않습니다.
var x = Math.sqrt(-2); var y = Math.log(-1); console.log(x === y); // false
두 NaN을 직접 비교하는 것은 어떻습니까?
console.log(NaN === NaN); // false
비숫자를 표현하는 방법은 다양하기 때문에 비숫자가 다른 비숫자, 즉 NaN과 동일하지 않다는 것은 여전히 의미가 있습니다.
물론 이제 솔루션을 사용할 수 있습니다. 전역 함수 isNaN에 대해 알아봅시다:
console.log(isNaN(NaN)); // true
아쉽지만 isNaN()에도 자체적으로 많은 결함이 있습니다.
console.log(isNaN('hello')); // true console.log(isNaN(['x'])); // true console.log(isNaN({})); // true
이로 인해 다양한 솔루션이 탄생하게 됩니다. NaN의 비반사 특성을 활용합니다(예: Kit Cambridge의 노트 참조)
var My = { isNaN: function (x) { return x !== x; } }
다행히 곧 출시될 ECMAScript 6에는 안정적인 NaN 값 감지를 제공하는 Number.isNaN() 메서드가 있습니다.
즉, 인수가 true NaN인 경우에만 true가 반환됩니다
console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN(Math.sqrt(-2))); // true console.log(Number.isNaN('hello')); // false console.log(Number.isNaN(['x'])); // false console.log(Number.isNaN({})); // false
二、引用类型的转换
基本类型间的比较相对简单。引用类型和基本类型的比较就相对复杂一些,先要把引用类型转成基本类型,再按上述的方法比较。
1.引用类型转布尔全是true。
比如空数组,只要是对象就是引用类型,所以[]为true。引用类型转数字或者字符串就要用valueOf()或者toString();对象本身就继承了valuOf()和toString(),还可以自定义valueOf()和toString()。根据不同的对象用继承的valueOf()转成字符串,数字或本身,而对象用toString就一定转为字符串。一般对象默认调用valueOf()。
1).对象转数字时,调用valueOf();
2).对象转字符串时,调用toString();
先看看下面的例子:
0 == []; // true, 0 == [].valueOf(); ---> 0 == 0; '0' == []; // false, '0' == [].toString(); ---> '0' == ''; 2 == ['2']; // true, 2 == ['2'].valueOf(); ---> 2 == '2' ---> 2 == 2; '2' == [2]; // true, '2' == [2].toString(); ---> '2' =='2'; [] == ![]; //true, [].valueOf() == !Boolean([]) -> 0 == false ---> 0 == 0;
对象转成数字时,调用valueOf(),在这之前先调用的是toString();所以我猜valueOf方法是这样的。So上面的例子 0 == []要改成下面更合理。无论如何,[]最后是转成0的。
var valueOf = function (){ var str = this.toString(); //先调用toString(),转成字符串 //... } 0 == []; // true, 0 == [].valueOf(); -> 0 == '0' -> 0 == 0;
自定义的valueOf()和toString();
- 自定义的valueOf()和toString()都存在,会默认调用valueOf();
- 如果只有toString(),则调用toString();
var a = [1]; a.valueOf = function (){ return 1;} a.toString = function (){ return '1';} a + 1; // 2, valueOf()先调用
去掉valueOf()就会调用toString()。
var a = [1]; a.valueOf = function (){ return 1;} a.toString = function (){ return '1';} a + 1; // 2, 先调用valueOf() //去掉valueOf delete a.valueOf; a + 1; // '11', 调用toString()
如果返回其它会怎么样呢?
var a = [1]; a.valueOf = function (){return ;} a.toString = function (){return 1 ;}; 1 - a; //NaN
其它对象 调用valueOf()转成不同的类型:
var a = {}; a.valueOf(); //Object {} var a = []; a.valueOf(); //[] 自己本身 var a = new Date(); a.valueOf(); //1423812036234 数字 var a = new RegExp(); a.valueOf(); // /(?:)/ 正则对象
引用类型之间的比较是内存地址的比较,不需要进行隐式转换,这里不多说。
[] == [] //false 地址不一样
var a = [];
b = a;
b == a //true
2.显式转换
显式转换比较简单,可以直接用类当作方法直接转换。
Number([]); //0
String([]); //”
Boolean([]); //true
还有更简单的转换方法。
3 + ” // 字符串'3'
+'3' // 数字3
!!'3' // true
以上就是本文的全部内容,详细介绍了javascript的隐式强制转换,希望对大家的学习有所帮助。

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章整理了20+Vue面试题分享给大家,同时附上答案解析。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.
