avaScript中,類型轉換只有三種:
console.log([]==![]); // 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「鏈接」
*請認真填寫需求信息,我們會在24小時內與您取得聯系。