Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
avaScript中,類型轉(zhuǎn)換只有三種:
console.log([]==![]); // true
代碼分析:
類型轉(zhuǎn)換規(guī)則,如下圖:
如若轉(zhuǎn)載,請(qǐng)注明出處:開源字節(jié) https://sourcebyte.cn/article/128.html
數(shù)值轉(zhuǎn)換為字符串類型,可以直接利用加號(hào)"+"將數(shù)值加上一個(gè)長(zhǎng)度為零的空字符串, 或者通過toString()方法
將數(shù)值轉(zhuǎn)換為字符串
<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()); //其結(jié)果為84
toString() 方法可把一個(gè) Number 對(duì)象轉(zhuǎn)換為一個(gè)字符串,并返回結(jié)果。
NumberObject.toString(radix)
radix 可選。規(guī)定表示數(shù)字的基數(shù),使 2 ~ 36 之間的整數(shù)。若省略該參數(shù),則使用基數(shù) 10。
但是要注意,如果該參數(shù)是 10 以外的其他值,則 ECMAScript 標(biāo)準(zhǔn)允許實(shí)現(xiàn)返回任意值。
數(shù)字的字符串表示。例如,當(dāng) radix 為 2 時(shí),NumberObject 會(huì)被轉(zhuǎn)換為二進(jìn)制值表示的字符串。
<script type="text/javascript">
var number=new Number(1337);
document.write (number.toString())
</script>
輸出:1337
對(duì)于字符串轉(zhuǎn)換為數(shù)值類型,javascript提供了兩種非常方便的方法,分別是parseInt和parseFloat()
前者是將字符串轉(zhuǎn)換為整數(shù),后者將字符串轉(zhuǎn)換為浮點(diǎn)數(shù),只有字符類型才能調(diào)用這兩種方法,否則直接返回NaN。
parseInt() 函數(shù)可解析一個(gè)字符串,并返回一個(gè)整數(shù)。
parseInt(string, radix)
radix 可選。表示要解析的數(shù)字的基數(shù)。該值介于 2 ~ 36 之間。
如果 string 以 "0x" 開頭,parseInt() 會(huì)把 string 的其余部分解析為十六進(jìn)制的整數(shù)。
如果 string 以 0 開頭,那么 ECMAScript v3 允許 parseInt() 的一個(gè)實(shí)現(xiàn)把其后的字符解析為八進(jìn)制或十六進(jìn)制的數(shù)字。
如果 string 以 1 ~ 9 的數(shù)字開頭,parseInt() 將把它解析為十進(jìn)制的整數(shù)。
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>"); //直接進(jìn)制轉(zhuǎn)換
document.write(parseInt("isaacshun@gmail.com") + "<br>");
</script>
輸出:4567
53
12
NaN
parseFloat() 函數(shù)可解析一個(gè)字符串,并返回一個(gè)浮點(diǎn)數(shù)。
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() 函數(shù)把對(duì)象的值轉(zhuǎn)換為數(shù)字。
Number(object)
如果參數(shù)是 Date 對(duì)象,Number() 返回從 1970 年 1 月 1 日至今的毫秒數(shù)。
如果對(duì)象的值無(wú)法轉(zhuǎn)換為數(shù)字,那么 Number() 函數(shù)返回 NaN。
在本例中,我們將嘗試把不同的對(duì)象轉(zhuǎn)換為數(shù)字:
<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; //八進(jìn)制 83
var test11=0x123; //或?qū)懗?X123 十六進(jìn)制 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
轉(zhuǎn)換變量的全局函數(shù)匯總:
Number()
使用Number函數(shù),可以將任意類型的值轉(zhuǎn)化成數(shù)值。
// 數(shù)值:轉(zhuǎn)換后還是原來(lái)的值
Number(324) // 324
// 字符串:如果可以被解析為數(shù)值,則轉(zhuǎn)換為相應(yīng)的數(shù)值
Number('324') // 324
// 字符串:如果不可以被解析為數(shù)值,返回 NaN
Number('324abc') // NaN
// 空字符串轉(zhuǎn)為0
Number('') // 0
// 布爾值:true 轉(zhuǎn)成 1,false 轉(zhuǎn)成 0
Number(true) // 1
Number(false) // 0
// undefined:轉(zhuǎn)成 NaN
Number(undefined) // NaN
// null:轉(zhuǎn)成0
Number(null) // 0
Number()和parseFloat()、parseInt()的區(qū)別:
Number() 轉(zhuǎn)換時(shí)包含整數(shù)和浮點(diǎn)數(shù)部分, 可以將任意類型的值轉(zhuǎn)化成數(shù)值;
parseInt() 只能轉(zhuǎn)換數(shù)值型字符串, 不能則直接轉(zhuǎn)換的返回NaN
parseFloat() 只能轉(zhuǎn)換數(shù)值型字符串, 轉(zhuǎn)換時(shí)包含整數(shù)和浮點(diǎn)數(shù)部分, 不能則直接轉(zhuǎn)換的返回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函數(shù)可以將任意類型的值轉(zhuǎn)化成字符串,轉(zhuǎn)換規(guī)則如下:
數(shù)值:轉(zhuǎn)為相應(yīng)的字符串。
字符串:轉(zhuǎn)換后還是原來(lái)的值。
布爾值:true轉(zhuǎn)為字符串"true",false轉(zhuǎn)為字符串"false"。
undefined:轉(zhuǎn)為字符串"undefined"。
null:轉(zhuǎn)為字符串"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
隱式類型轉(zhuǎn)換
運(yùn)算中存在的隱式類型轉(zhuǎn)換
"+"運(yùn)算符
var a=11, b='22';
var c=a + b;
這里引擎將會(huì)先把a(bǔ)變成字符串"11"再與b進(jìn)行連接, 變成了"1122"。有人會(huì)有疑問, 為什么不把b變成數(shù)字22再進(jìn)行算術(shù)加運(yùn)算呢, 這樣的話c就是33了。
沒有為什么, 當(dāng)運(yùn)算符"+"兩邊一個(gè)是數(shù)字類型, 一個(gè)是字符串類型時(shí), js引擎規(guī)定進(jìn)行字符串連接運(yùn)算而非算術(shù)加運(yùn)算。
利用運(yùn)算符"+"這個(gè)特性, 可以很方便的將Number轉(zhuǎn)換成String。如
var a=11;
alert(typeof a); //-->number
a=a + '';
alert(typeof a); //-->string
"-"運(yùn)算符
"-"可以是一元運(yùn)算符(取負(fù)), 也可以是二元(減法運(yùn)算)的。如
var a=11, b='5';
var c=a - b;
alert(typeof c); //--> number
這里與上面的"+"相反,會(huì)把字符串b隱式的轉(zhuǎn)換成數(shù)字5再進(jìn)行算術(shù)減法運(yùn)算。利用這個(gè)特性,可以很方便的將String轉(zhuǎn)換成Number
var a='11';
a=a - '';
alert(typeof a);// -->number
語(yǔ)句中存在的隱式類型轉(zhuǎn)換
if語(yǔ)句
var obj={name:'jack'}
if(obj){
//do more
}
這里會(huì)把obj隱式的轉(zhuǎn)換成Boolean類型
while語(yǔ)句
var obj={name:'jack'}
while(obj){
//do more
}
同if語(yǔ)句
for in時(shí)的類型轉(zhuǎn)換
定義對(duì)象字面量時(shí)發(fā)生從標(biāo)識(shí)符到字符串的隱式轉(zhuǎn)換。
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分別加單/雙引號(hào)以強(qiáng)調(diào)其為String類型, school沒有加單/雙引號(hào)。
我們遍歷下該對(duì)象的屬性, 查看其類型。發(fā)現(xiàn)school也被隱式的轉(zhuǎn)換成了String類型。
數(shù)組的索引其實(shí)也是字符串類型。這著實(shí)令人驚嘆, 但事實(shí)的確如此。如
var ary=[1,3,5,7];
for(var a in ary){
alert(a + ": " + typeof a); /* 返回值0: string
1: string
2: string
3: string */
}
alert時(shí)存在的隱式類型轉(zhuǎn)換
String.prototype.fn=function(){return this};
var a='hello';
alert(typeof a.fn()); //-->object
alert(a.fn()); //-->hello
給String原型上添加了個(gè)fn方法,該方法返回this,我們知道this可以理解成當(dāng)前類的實(shí)例對(duì)象,既然是對(duì)象那么typeof a.fn()自然返回是object了。
關(guān)鍵是最后的alert(a.fn()),a.fn()返回的明明是對(duì)象,但卻隱式的轉(zhuǎn)換成了字符串"hello"顯示。
同樣的情況發(fā)生在數(shù)字類型上,如
Number.prototype.fn=function(){return this};
var a=10;
alert(typeof a.fn());//-->object
alert(a.fn()); //-->10
a.fn()返回的是對(duì)象類型, 但在alert(a.fn())時(shí)會(huì)隱式的將其轉(zhuǎn)換成數(shù)字。
typeof(varname); 也可寫成 typeof varname;
instanceof判斷數(shù)據(jù)類型
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
型轉(zhuǎn)換,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 過去的網(wǎng)站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中查不出來(lái), 但I(xiàn)dea中可以打點(diǎn)打出來(lái)。
*/
var a=9;
/*下句話如果放在ie8中執(zhí)行, 必須打開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);
篇幅有限更多請(qǐng)見擴(kuò)展鏈接:http://www.mark-to-win.com/tutorial/js_1_TypeConvert.html「鏈接」
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。