js強制型別轉換

2021-10-07 20:15:23 字數 3552 閱讀 2168

var a = 42;

var b = a + ""; //隱式強制型別轉換

var c = string( a ); //顯式強制型別轉換

基本型別值的字串化規則為: null轉換為"null",undefined轉換為"undefined",true轉化為」true",數字的字串化則遵循通用規則

var a = 1.07 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000;

a.tostring(); //"1.07e21"

如果物件有自己定義的tostring()方法那麼呼叫的時候將會呼叫自身的tostring()方法

如果沒有自己定義的話,tostring()(object.prototype.tostring())將會返回內部屬性 [[class]] 方法

陣列的預設tostring()方法經過重新定義,將所有單元字串化再用 "," 連線起來:

var a = [1,2,3];

a.tostring();

json字串化

json.stringify(..) 在將json物件序列化為字串時也用到了tostring

json.stringify(..) 在物件中遇到undefined,function,symbol會自動將其忽略,在陣列中則會返回null

json.stringify( undefined );    //undefined

json.stringify( function(){} ); //undefined

json.stringify( [1,undefined,function() {},4] ); //"[1,null,null,4]"

json.stringify( } ); //""

如果物件中定義了tojson()方法,json字串化時會首先呼叫該方法,然後用它的返回值來進行序列化

var o = ;

var a =

};o.e = a;

json.stringify( a );

a.tojson = function() ; //序列化僅包含b

};json.stringify( a );

tojson()應該返回乙個能夠被字串化的安全的json值,而不是返回乙個json字串

json.stringify() 傳遞乙個可選引數 replacer

var a = ;

json.stringify( a, ["b","c"] ); //""

json.stringify( a,function(k,v) ); //""

當replacer是函式的時候,k在第一次呼叫時為undefined,而在遍歷到d時,k會變成陣列的索引 0,1,2

json.stringify()還有乙個可選引數space,用來指定輸出的縮排格式,space為正整數時為每一級縮排的字元數

json.stringify( a, null, 3);

tonumber()將非數字值轉為數字值,

其中true轉換為1,false轉換為0。undefined轉換為nan,null轉換為0.

物件會首先被轉化為相應的基本型別,如果返回的時非數字的基本型別值,則在遵循以上規則將其強制轉換為數字。

為了將值轉換為相應的基本型別值,抽象操作toprimitive會首先檢查該值是否有valueof()方法。

如果有並且返回基本型別值,就使用該值進行強制型別轉換。如果沒有就是用tostring()的返回值來進行強制型別轉換。

如果valueof() 和 tostring()均不返回基本型別值,會產生typeerror錯誤。

強制轉換被轉換成false的值

undefined

null

false

+0,-0,nan

其他的值強制轉換時都會被轉成true

假值物件

假值物件並不是包裝了假值的封裝物件,而是強制型別轉換boolean時結果為false

真值就是除假值之外的值

數字與字串之間的轉換

var a = 42;

var b = string( a );

var c = "3.14";

var d = number( c );

b; //"42"

d;

顯式轉換中帶有的隱式轉換,js引擎會自動為42建立乙個封裝物件 ,然後對該物件呼叫tostring()方法

var a = 42;

var b = a.tostring();

var c = "3.14";

var d = +c;

b; //"42"

d;

日期顯式轉換為數字

var d = new date( "mon, 18 aug 2014 08:53:06 cdt" );

+d; //1408369986000

var timestamp = + new date();

+號將強制轉換為數字

es5中強制型別轉換的方法

var timestamp = date.now();
~運算子

~x等於  -(x+1)

~和indexof()可以將結果進行強制型別轉換

var a = "hello world";

~a.indexof( "lo" ); //-4

if(~a.indexof( "lo" ))

~a.indexof( "ol" ); //0

!~a.indexof( "ol" ); //true

if(!~a.indexof( "ol" ))

~~中的第乙個~執行toint32並反轉字位,然後第二個~再進行一次字位反轉,即將所有字位反轉回原值,最後得到的仍然是toint32的結果

math.floor( -49.6 );   //-50

~~-49.6; //-49

var a = "42";

var b = "42px";

number( a ); //42

parseint( a ); //42

number( b ); //nan

parseint( b ); //42

解析允許字串中含有非數字字元,解析按從左到右的順序,如果遇到非數字字元就停止。

而轉換不允許出現非數字字元,否則會失敗並返回nan。

parseint(..) 如果沒有指定第二個引數radix,那麼字串的第乙個字元來決定基數,如果第乙個字元式是x或x,則轉換為十六進製制。如果是0,則轉換為八進位制數字。

為了可能存在的bug,我們需要傳入第二個引數

JS 型別轉換 強制型別轉換

js 型別轉換 強制型別轉換 一 parseint 將其他型別轉換成number型別的整數 注意 string number 1 字串中值的首字元必須是數字,轉換後才能得到具體的值 否則得到nan 2 只轉換從首字元開始的連續數字 如 2b345 轉換後只得到2 3 除了string,其他型別轉換後...

js強制型別轉換

值型別轉換 包括兩種 顯式轉換和隱式轉換。將值從一種型別轉換為另外一種型別稱為型別轉換,也叫做顯式型別轉換,隱式的情況也叫做強制型別轉換。在js中兩種轉換被統稱為強制型別轉換。其實,對於顯式和隱式沒有很明確的界定,如果你不知道某種情況是一種顯式型別轉換,那麼它對於你來講就是隱式的。抽象值操作 顯示強...

JS 強制型別轉換

number string var number 8 var str string number console.log typeof str 複製 boolean string var boolean true var str string boolean console.log typeof s...