javascript
JS不同类型之间运算与转换
基本數據類型隱式轉換:
隱式轉換邏輯
如:“32”+32=“3232”? ? "+"可以把數字轉換為字符串? ? “+”可以理解為字符串拼接
“32”-32=0? ? ? ? ? ? “- * /”可以把操作數轉換為數字? ?“-”可以理解為減法運算
把一個變量num變成數字:num-0;
把一個變量num變成字符串:num+' ';
?
不同類型的基礎數據之間的加法,數據先轉換為number,然后轉換為string(如果有string類型數據參與運算)
null + undefined // 0+NaN null + false // 0+0 1 + true // 1+1 1 + '1' //'11';數字與字符串相加結果是字符串 1 + 2 + '3' //'33';(1+2)的結果然后與'3'相加;這里要把每一步加法單獨拆開來看,否則變成和下面一樣的結果了. 1 + (2 +'3') //'123';先運算2+'3',然后1+'23' 's' + null //'snull' 's' + undefined // 'sundefined' 's' + true //'strue' 1 + true + undefined + 's' // 1+1+NaN+'s'=2+NaN+'s'=NaN+'s'=‘NaNs’?
數據前有加號‘+',可以讓字符串轉化為數字
+'1'+1 // 2
+'s'+2 // NaN
?
?常用的原始類型之間的轉換函數就是String()、Number()、Boolean()。
JS原始類型轉換表
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
由于隱式轉換只能轉換原始值類型,如果轉換對象等復雜類型需要用到valueOf()和toString()
判斷字符串是不是數字字符串:isNaN(str);
實現對象轉字符串以及對象轉數字的方法:
該轉換規則只適用于本地對象。什么是本地對象?本地對象也叫內置對象,就是JS標準規范定義的對象或類。比如Array、Object、function、data、global。還有一類對象叫宿主對象,就是要有一個宿生的對象和環境,在JS中宿主對象都是寄生在瀏覽器中的,在瀏覽器中才存在的對象,比如event、BOM、DOM。
本地對象都繼承了兩個轉換方法:toString()與valueOf()
?
(1)對象到字符串的轉換過程
原始(基本)類型:undefined、null、string、number、boolean
首先調用toString()方法,只有當toString不返回一個原始值的時候,才會調用valueOf()
toString()方法基本上所有對象都返回字符串。
toString()方法用在對象上面,比如function、array、object,返回的值都差不多,都是返回這個對象的源碼,但是以字符串的形式表示。
var a=[1,2,'a']; var b=a.toString(); console.log(b);//1,2,a console.log(typeof(b));//stringvar fun=function(){return 'hello world'; } var f=fun.toString(); console.log(f);//function(){return 'hello world';} console.log(typeof(f));//stringvalueOf存在任意原始值,他就默認將對象轉換為表示它的原始值。如果是復合值,和toString()一樣,即返回本身,但是還是和toString()方法有區別的,toString()返回的是以字符串形式表示,valueOf()返回的是以對象的形式表示
var obj={name:'an'}; var obj1=obj.toString(); console.log(obj1);//[object,object] console.log(typeof(obj1));//string var obj2=obj.valueOf(); console.log(obj2);//{name: "an"}?
(2)對象到數字的轉換過程
首先調用valueOf(),如果返回原始值,將原始值轉為數字并返回,valueOf()基本上所有的對象返回的都是對象,雖然先使用valueOf(),但實際上也是使用的toString()的方法。
如let a={ }; 轉為數字
首先會調用a的valueOf()方法,如果結果不是原始類型,那么調用toString()方法;
a.valueOf()返回對象本身{ },不是原始類型,所以需要繼續調用toString()方法;
a.toString()返回“[object,object]”,是一個字符串類型,即原始類型,所以接下來會調用Number(“[object,object]”),返回NaN;
?
做題中遇到的問題:
console.log(([])?true:false);//true Boolean([]); //true console.log(([]==false)?true:false);//true????為什么兩個的結果不一樣對于[ ]==false
轉載于:https://www.cnblogs.com/xiaoan0705/p/8671305.html
總結
以上是生活随笔為你收集整理的JS不同类型之间运算与转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《数据管理能力成熟度模型》标准宣贯会在上
- 下一篇: Spring容器与上下文理解