日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Javascript基础之-强制类型转换(一)

發布時間:2024/4/14 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Javascript基础之-强制类型转换(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉換為字符串規則如下圖代碼:

console.log(String(undefined)); // "undefined" console.log(String(null)); // "null" console.log(String(true)); // "true" console.log(String(+0)); // "0" console.log(String(-0)); // "0" console.log(String(-20)); // "-20" console.log(String(Infinity)); // "Infinity" console.log(String(new Number(123))) // 123 console.log(String(new Object())) // [object Object] console.log(100000000000000000000000000000); // 1e+29

大致就是普通其他基本類型轉為字符串的話,就直接轉為其值的字符串表達形式,

如果是基本類型的封裝對象,會先拆封,然后再轉為字符串,

如果是普通對象,則會調用其內部[class]的值,

如果是極大數和級小數,將會進行一些轉化,具體規則請參考ecma 官方文檔https://www.ecma-internationa...

請思考下面的代碼

var obj = {toString() {return "toString";} } console.log(String(obj)) // toString var obj1 = Object.create(null); obj1.valueOf = function() {return "valueOf"; } console.log(String(obj1)); // valueOf

上面這個代碼似乎可以看出,實際上普通對象轉為字符串的過程,似乎就是toString()的一個過程,也就是調用其內部toString()的一個過程

如果toString()沒有咋辦,調用valueOf,如果這個也沒有呢,就直接報錯了。

轉換為數字的規則

普通轉換為數字的規則如下:

console.log(Number(true)); // 1 console.log(Number(0b1101)) // 13 console.log(Number(false)); // 0 console.log(Number("123")); //123 console.log(Number("123a")); //NaN console.log(Number(undefined)); // NaN console.log(Number(null)); // 0

不過呢,如果是對象類型的咋辦呢,實際上同上的一點是,如果是基本類型封裝后的對象,會先拆封,也就是轉為基本類型值,然后再轉為數字,比如說

console.log(Number(new String("123123"))); // 123123 console.log(Number([1])); // 1 console.log(Number([1, 3])); // NaN

可能你會疑惑,說,為啥數組只有一個數據的時候可以轉換,有兩個數據的時候就是NaN了呢,原因在這里,看代碼

console.log([1].valueOf()); // [1] console.log([1, 3].valueOf()); // [1, 3] console.log([1].toString()); // 1 console.log([1, 3].toString()); //1, 3

可以看到,valueOf沒有返回基本類型值,所以轉而使用toString轉為基本類型值,這倆字符串再轉為數字的結果就一目了然了,和上面的是一樣的

那么轉為數字的過程中,valueOf和toString是哪個先執行的呢?

看代碼

var a = {valueOf() {return 2;},toString() {return 3;} } var b = {valueOf() {return [1, 3];},toString() {return 3;} } var c = {toString() {return 3;} } var d = Object.create(null); console.log(Number(a)); // 2 console.log(Number(b)); // 3 console.log(Number(c)); // 3 console.log(Number(d)); // Uncaught TypeError: Cannot convert object to primitive value

這個其實就說明了一個問題,就是說對象轉數字的時候,會先找valueOf(),如果valueOf()沒有,或者是說轉的是非基本數據類型的,將會使用toString(),最后基本類型專成數字類型的,如果valueOf和toString()都沒有,就直接報錯了

轉化為數字呢,除了以上使用Number(),還可以使用+符號,這個也可以實現從其他類型轉換到字符串

console.log(+"abc"); // NaN console.log(+"1111"); //1111 console.log(+[1]); // 1 var obj = {valueOf() {return "1111";} } console.log(+obj); // 1111

如果原數據類型是Date,那么可以用Number或者+轉為以微秒為單位的unix時間戳

var d = new Date( "Mon, 18 Aug 2014 08:53:06 CDT" ); console.log(+d); // 1408369986000 console.log(Number(d)); //1408369986000parseInt和Number()的區別:看例子var a = "123abc"; console.log(+a); // NaN console.log(parseInt(a)); // 123 console.log(parseInt("abc123")); // NaN

實際上,parseInt會從左往右進行解析,找到非字符串的時候停止,如果一開始就不可轉為數字,那么就返回NaN

parseInt其他一些坑點,這里就不細說了,想看的,可以找《你不知道的Javascript》了解細節

// 0 ("0" 來自于 "0.000008") console.log(parseInt( 0.000008 )); // 8 ("8" 來自于 "8e-7") console.log(parseInt( 0.0000008 )); // 250 ("fa" 來自于 "false") console.log(parseInt( false, 16 )); // 15 ("f" 來自于 "function..") console.log(parseInt( parseInt, 16 )); console.log(parseInt( "0x10" )); // 16 console.log(parseInt( "103", 2 )); // 2

轉化為布爾值

下面是假值列表,理論上說,除了以下內容以外的值都是true

console.log(Boolean(undefined)); console.log(Boolean(null)); console.log(Boolean(false)); console.log(Boolean(+0)); console.log(Boolean(-0)); console.log(Boolean(NaN)); console.log(Boolean(""));

這里有一點需要說明,規范里有提到,所有的對象都是true,所以這方面尤其需要注意的就是下面的例子了

console.log(Boolean(new Boolean(false))); // true console.log(Boolean(new String(""))); // true console.log(Boolean(new Number(0))); // true

返回的都是true,雖然他是對假值得封裝,但是他們是對象,是對象就返回true,所以用假值對象或者其他看起來像價值的字符串來進行if判斷是不靠譜的

var bObj = new Boolean(false); var a = []; var d = {}; var e = function() {} var f = "false"; var g = "0"; var h = "''"; if (a && d && e && f && g && h) {console.log('all right'); // all right }

一般顯式的吧數據轉為布爾型,除了使用Boolean()以外,還可以使用!!符號,也就是連著反轉兩次

console.log(!!undefined); // false console.log(!!new Boolean(false)); // true

好了就到這里了,這一次因為東西比較零散,準備了一陣子,希望大家有所收獲

參考書籍《你不知道的Javascript中卷》

本文轉載自http://www.lht.ren/article/5/

總結

以上是生活随笔為你收集整理的Javascript基础之-强制类型转换(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 星空大象mv高清在线观看免费 | va毛片 | 国产精品一区二区黑人巨大 | 韩国久久精品 | 国内精品国产三级国产aⅴ久 | 99久草 | 欧美第一页浮力影院 | 日本xxxxwwwww| 九一国产精品 | 国产黄色免费 | 苍井空张开腿实干12次 | 乳女教师の诱惑julia | 国产精品羞羞答答在线观看 | 日韩天堂在线观看 | 蜜臀久久精品久久久用户群体 | 风韵少妇性饥渴推油按摩视频 | 欧美日韩国产三区 | 欧美日韩国产精品一区二区三区 | 成在线人免费视频 | 人妻互换免费中文字幕 | 天天操天天插 | 欧洲av一区 | 秋霞成人午夜伦在线观看 | 粉嫩av网址 | 国产精品精品国产色婷婷 | 日韩一区在线免费观看 | 永久久久久久久 | 久久一二三四区 | 日本wwww视频| 国产伦精品一区二区三区免.费 | 日本在线视频观看 | 日韩中文字幕综合 | 天天干夜夜爽 | 在线h网站 | 国产综合亚洲精品一区二 | 特级西西444www高清大胆免费看 | 国产999视频 | 日韩一区在线看 | 日韩美女视频一区 | 精品国产乱码久久 | 91九色高潮| 97超碰在线资源 | 免费国产网站 | 中文字幕第一页av | 亚洲成人另类 | 日韩欧美片 | 四虎国产在线观看 | 一级片免费观看视频 | 风间由美在线视频 | 97黄色片| 男男做的视频 | 美女擦边视频 | 乱岳| 亚洲色图日韩精品 | 国产社区在线 | 久久黄页| 在线国产三级 | 午夜激情电影在线观看 | 精品国产麻豆 | 国产情侣一区二区三区 | 伊人久久久久久久久久 | 都市激情亚洲一区 | 亚洲网在线 | 福利国产在线 | 欧美精品乱人伦久久久久久 | 8x国产一区二区三区精品推荐 | 天天干夜夜玩 | 成人免费视频观看视频 | 国产精品69毛片高清亚洲 | 天天射天天草 | 俄罗斯丰满熟妇hd | 欧美激情小视频 | 成人av网站在线播放 | ass精品国模裸体pics | 国产成人在线观看免费 | 一区二区精品视频在线观看 | 91吃瓜在线| 日本不卡视频在线播放 | 成人资源在线 | 亚洲一区免费看 | 天天干天天狠 | 成人av色| 久久久久久久久久免费视频 | 国产三级影院 | 日韩欧美第一页 | 98成人网 | 我要看免费毛片 | 怨女1988国语版在线观看高清 | 日韩欧美激情视频 | 男人的天堂亚洲 | 精品人妻一区二区色欲产成人 | 男人天堂欧美 | 亚洲国产tv | 国产精品 欧美激情 | 丁香花电影高清在线阅读免费 | 日日摸日日添日日躁av | 伊人网在线视频 | 久久久久无码国产精品 | 成年人看的毛片 |