整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript類型轉換

          JavaScript類型轉換

          avaScript中,類型轉換只有三種:

          1. 轉換成數字
          2. 轉換成布爾值
          3. 轉換成字符串

          經典類型面試題

          console.log([]==![]); // true
          

          代碼分析

          1. 左側是一個對象(數組)
          2. 右側是一個布爾值,對象[]轉換成布爾值true,因為除了null所有對象都轉換成布爾值,所以![]結果為false
          3. 此時相當于對象==布爾值,依據類型轉換規則,轉換成數字類型進行比較
          4. 對象(空數組)轉換成0,布爾值false轉換成0
          5. 0==0,返回true

          類型轉換規則,如下圖:

          如若轉載,請注明出處:開源字節 https://sourcebyte.cn/article/128.html

          數值轉換為字符串類型,可以直接利用加號"+"將數值加上一個長度為零的空字符串, 或者通過toString()方法

          將數值轉換為字符串

          <script language="javascript">

          var a=3;

          var b=a + "";

          var c=a.toString();

          var d="student" + a;

          alert(typeof(a) + " " + typeof(b) + " " +typeof(c) + " " +typeof(d));

          </script>

          var a=b=c=4;

          alert(a+b+c.toString()); //其結果為84

          toString() 方法可把一個 Number 對象轉換為一個字符串,并返回結果。

          NumberObject.toString(radix)

          radix 可選。規定表示數字的基數,使 2 ~ 36 之間的整數。若省略該參數,則使用基數 10。

          但是要注意,如果該參數是 10 以外的其他值,則 ECMAScript 標準允許實現返回任意值。

          數字的字符串表示。例如,當 radix 為 2 時,NumberObject 會被轉換為二進制值表示的字符串。

          <script type="text/javascript">

          var number=new Number(1337);

          document.write (number.toString())

          </script>

          輸出:1337

          對于字符串轉換為數值類型,javascript提供了兩種非常方便的方法,分別是parseInt和parseFloat()

          前者是將字符串轉換為整數,后者將字符串轉換為浮點數,只有字符類型才能調用這兩種方法,否則直接返回NaN。

          parseInt() 函數可解析一個字符串,并返回一個整數。

          parseInt(string, radix)

          radix 可選。表示要解析的數字的基數。該值介于 2 ~ 36 之間。

          如果 string 以 "0x" 開頭,parseInt() 會把 string 的其余部分解析為十六進制的整數。

          如果 string 以 0 開頭,那么 ECMAScript v3 允許 parseInt() 的一個實現把其后的字符解析為八進制或十六進制的數字。

          如果 string 以 1 ~ 9 的數字開頭,parseInt() 將把它解析為十進制的整數。

          parseInt("10"); //返回 10

          parseInt("19",10); //返回 19 (10+9)

          parseInt("11",2); //返回 3 (10+9)

          parseInt("17",8); //返回 15 (8+7)

          parseInt("1f",16); //返回 31 (16+15)

          parseInt("010"); //未定:返回 10 或 8

          <script language="javascript">

          document.write(parseInt("4567red") + "<br>");

          document.write(parseInt("53.5") + "<br>");

          document.write(parseInt("0xC") + "<br>"); //直接進制轉換

          document.write(parseInt("isaacshun@gmail.com") + "<br>");

          </script>

          輸出:4567

          53

          12

          NaN

          parseFloat() 函數可解析一個字符串,并返回一個浮點數。

          parseFloat(string)

          <script type="text/javascript">

          document.write(parseFloat("10"))

          document.write(parseFloat("10.00"))

          document.write(parseFloat("10.33"))

          document.write(parseFloat("34 45 66"))

          document.write(parseFloat(" 60 "))

          document.write(parseFloat("40 years"))

          document.write(parseFloat("He was 40"))

          </script>

          輸出:

          10

          10

          10.33

          34

          60

          40

          NaN

          Number() 函數把對象的值轉換為數字。

          Number(object)

          如果參數是 Date 對象,Number() 返回從 1970 年 1 月 1 日至今的毫秒數。

          如果對象的值無法轉換為數字,那么 Number() 函數返回 NaN。

          在本例中,我們將嘗試把不同的對象轉換為數字:

          <script type="text/javascript">

          var test1=new Boolean(true);

          var test2=new Boolean(false);

          var test3=new Date();

          var test4=new String("999");

          var test5=new String("999 888");

          var test6=null;

          var test7=undefined;

          var test8="1234abc"; //NaN

          var test9=.123; //0.123

          var test10=0123; //八進制 83

          var test11=0x123; //或寫成0X123 十六進制 291

          document.write(Number(test1)+ "<br />");

          document.write(Number(test2)+ "<br />");

          document.write(Number(test3)+ "<br />");

          document.write(Number(test4)+ "<br />");

          document.write(Number(test5)+ "<br />");

          document.write(Number(test6)+ "<br />");

          document.write(Number(test7)+ "<br />");

          document.write(Number(test8)+ "<br />");

          document.write(Number(test9)+ "<br />");

          document.write(Number(test10)+ "<br />");

          document.write(Number(test11)+ "<br />");

          </script>

          輸出:

          1

          0

          1256657776588

          999

          NaN

          0

          NaN

          NaN

          0.123

          83

          291

          轉換變量的全局函數匯總:

          Number()

          使用Number函數,可以將任意類型的值轉化成數值。

          // 數值:轉換后還是原來的值

          Number(324) // 324

          // 字符串:如果可以被解析為數值,則轉換為相應的數值

          Number('324') // 324

          // 字符串:如果不可以被解析為數值,返回 NaN

          Number('324abc') // NaN

          // 空字符串轉為0

          Number('') // 0

          // 布爾值:true 轉成 1,false 轉成 0

          Number(true) // 1

          Number(false) // 0

          // undefined:轉成 NaN

          Number(undefined) // NaN

          // null:轉成0

          Number(null) // 0

          Number()和parseFloat()、parseInt()的區別:

          Number() 轉換時包含整數和浮點數部分, 可以將任意類型的值轉化成數值;

          parseInt() 只能轉換數值型字符串, 不能則直接轉換的返回NaN

          parseFloat() 只能轉換數值型字符串, 轉換時包含整數和浮點數部分, 不能則直接轉換的返回NaN

          var test="12345.678abc";

          document.write(Number(test)+"<br/>"); //NaN

          document.write(Number(null)+"<br/>"); //0

          document.write(Number(true)+"<br/>"); //1

          document.write(Number(undefined)+"<br/>"); //NaN

          document.write(parseFloat(test)+"<br/>"); //12345.678

          document.write(parseInt(test)+"<br/>"); //12345

          document.write(parseInt(null)+"<br/>"); //NaN

          document.write(parseInt(true)+"<br/>"); //NaN

          document.write(parseInt(undefined)+"<br/>"); //NaN

          String()

          String函數可以將任意類型的值轉化成字符串,轉換規則如下:

          數值:轉為相應的字符串。

          字符串:轉換后還是原來的值。

          布爾值:true轉為字符串"true",false轉為字符串"false"。

          undefined:轉為字符串"undefined"。

          null:轉為字符串"null"。

          console.log(String(123)); // 123

          console.log(String("123")); // 123

          console.log(String(true)); // true

          console.log(String(undefined)); //undefined

          console.log(String(null)); //null

          Boolean() true: 非0、 非空字符串 false: 0、""、 null、 undefined、 NaN

          Boolean(undefined) // false

          Boolean(null) // false

          Boolean(0) // false

          Boolean(NaN) // false

          Boolean('') // false

          隱式類型轉換

          運算中存在的隱式類型轉換

          "+"運算符

          var a=11, b='22';

          var c=a + b;

          這里引擎將會先把a變成字符串"11"再與b進行連接, 變成了"1122"。有人會有疑問, 為什么不把b變成數字22再進行算術加運算呢, 這樣的話c就是33了。

          沒有為什么, 當運算符"+"兩邊一個是數字類型, 一個是字符串類型時, js引擎規定進行字符串連接運算而非算術加運算。

          利用運算符"+"這個特性, 可以很方便的將Number轉換成String。如

          var a=11;

          alert(typeof a); //-->number

          a=a + '';

          alert(typeof a); //-->string

          "-"運算符

          "-"可以是一元運算符(取負), 也可以是二元(減法運算)的。如

          var a=11, b='5';

          var c=a - b;

          alert(typeof c); //--> number

          這里與上面的"+"相反,會把字符串b隱式的轉換成數字5再進行算術減法運算。利用這個特性,可以很方便的將String轉換成Number

          var a='11';

          a=a - '';

          alert(typeof a);// -->number

          語句中存在的隱式類型轉換

          if語句

          var obj={name:'jack'}

          if(obj){

          //do more

          }

          這里會把obj隱式的轉換成Boolean類型

          while語句

          var obj={name:'jack'}

          while(obj){

          //do more

          }

          同if語句

          for in時的類型轉換

          定義對象字面量時發生從標識符到字符串的隱式轉換。

          var person={'name':'jack',"age":20,school:'PKU'};

          for(var a in person){

          alert(a + ": " + typeof a); / * 返回值name: string

          jack: string

          age: string

          school: string */

          }

          這里name, age分別加單/雙引號以強調其為String類型, school沒有加單/雙引號。

          我們遍歷下該對象的屬性, 查看其類型。發現school也被隱式的轉換成了String類型。

          數組的索引其實也是字符串類型。這著實令人驚嘆, 但事實的確如此。如

          var ary=[1,3,5,7];

          for(var a in ary){

          alert(a + ": " + typeof a); /* 返回值0: string

          1: string

          2: string

          3: string */

          }

          alert時存在的隱式類型轉換

          String.prototype.fn=function(){return this};

          var a='hello';

          alert(typeof a.fn()); //-->object

          alert(a.fn()); //-->hello

          給String原型上添加了個fn方法,該方法返回this,我們知道this可以理解成當前類的實例對象,既然是對象那么typeof a.fn()自然返回是object了。

          關鍵是最后的alert(a.fn()),a.fn()返回的明明是對象,但卻隱式的轉換成了字符串"hello"顯示。

          同樣的情況發生在數字類型上,如

          Number.prototype.fn=function(){return this};

          var a=10;

          alert(typeof a.fn());//-->object

          alert(a.fn()); //-->10

          a.fn()返回的是對象類型, 但在alert(a.fn())時會隱式的將其轉換成數字。

          typeof(varname); 也可寫成 typeof varname;

          instanceof判斷數據類型

          var str=null

          var arr=[];

          var obj={}; //new Object()

          console.log(str instanceof Object); //false

          console.log(arr instanceof Array); //true

          console.log(obj instanceof Object); //true

          型轉換,typeof的用法

          例 3.1.1

          <HTML>
          <head>
          <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
          </head>
          <BODY>
          <SCRIPT LANGUAGE="JavaScript">
          <!--
          /*
          Cast operator (Definition) refer to 過去的網站www.favo.com
          A way of converting data types.
          Primitive values can be converted from one to another or rendered as objects by using object constructors to convert the values.

          Boolean
          Number
          String

          Number() (Function) 馬克-to-win: actually Number() is the method of Global object.
          A Number type convertor.

          Property/method value type: Number primitive
          JavaScript syntax: - Number()
          - Number(aValue)
          Argument list: aValue A value to be converted to a number.

          When the Number() constructor is called as a function, it will perform a type conversion.
          The following values are yielded as a result of calling Number() as a function:

          Value Result
          Number No conversion, the input value is returned unchanged.
          Non numeric string NaN

          window.Number("23");在favo中查不出來, 但Idea中可以打點打出來。
          */
          var a=9;
          /*下句話如果放在ie8中執行, 必須打開debug工具*/
          // console.log(typeof(a));
          document.writeln(typeof(a));
          var as=String(a);
          //String是Global的方法
          document.writeln("typeof(as) is " + typeof(as));
          var x=window.Number("23");
          document.writeln("typeof(x) is " + typeof(x));
          var age2=Number("56");
          document.writeln(typeof(age2) + "is typeof(age2)");
          var age3=new Number(56);

          篇幅有限更多請見擴展鏈接:http://www.mark-to-win.com/tutorial/js_1_TypeConvert.html「鏈接」


          主站蜘蛛池模板: 在线精品一区二区三区电影 | 香蕉久久AⅤ一区二区三区| 色系一区二区三区四区五区| 亚洲欧洲一区二区三区| 人妻无码一区二区三区AV| 日韩精品一区二区三区老鸦窝| 无码乱码av天堂一区二区| 国产精品久久久久久一区二区三区| 精品人妻无码一区二区三区蜜桃一| 日本在线一区二区| 日本精品一区二区久久久| 欧美激情一区二区三区成人| 国产伦精品一区二区三区四区| 波多野结衣av高清一区二区三区| 久久99国产一区二区三区| 无码国产精品一区二区免费模式| 日产精品久久久一区二区| 白丝爆浆18禁一区二区三区| 精品国产一区二区三区免费| 精品成人乱色一区二区| 无码日韩精品一区二区三区免费 | 国产激情无码一区二区app| 99精品国产一区二区三区不卡| 国产suv精品一区二区33| 亚洲乱码国产一区三区| 2022年亚洲午夜一区二区福利| 国99精品无码一区二区三区| 色噜噜狠狠一区二区| 国产日韩精品一区二区在线观看| 亚洲日韩AV无码一区二区三区人 | 无码人妻啪啪一区二区| 国产成人精品久久一区二区三区 | 久久国产高清一区二区三区 | 中文字幕日韩一区| 国产高清在线精品一区二区三区| 日韩人妻精品一区二区三区视频 | 国产av天堂一区二区三区| 国产高清视频一区三区| 日本精品一区二区三区视频 | 国产一区在线电影| 亚洲成人一区二区|