基本型別值的字串化規則為: null轉換為"null",undefined轉換為"undefined",true轉化為」true",數字的字串化則遵循通用規則var a = 42;
var b = a + ""; //隱式強制型別轉換
var c = string( a ); //顯式強制型別轉換
如果物件有自己定義的tostring()方法那麼呼叫的時候將會呼叫自身的tostring()方法var a = 1.07 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000;
a.tostring(); //"1.07e21"
如果沒有自己定義的話,tostring()(object.prototype.tostring())將會返回內部屬性 [[class]] 方法
陣列的預設tostring()方法經過重新定義,將所有單元字串化再用 "," 連線起來:
json字串化var a = [1,2,3];
a.tostring();
json.stringify(..) 在將json物件序列化為字串時也用到了tostring
json.stringify(..) 在物件中遇到undefined,function,symbol會自動將其忽略,在陣列中則會返回null
如果物件中定義了tojson()方法,json字串化時會首先呼叫該方法,然後用它的返回值來進行序列化json.stringify( undefined ); //undefined
json.stringify( function(){} ); //undefined
json.stringify( [1,undefined,function() {},4] ); //"[1,null,null,4]"
json.stringify( } ); //""
tojson()應該返回乙個能夠被字串化的安全的json值,而不是返回乙個json字串var o = ;
var a =
};o.e = a;
json.stringify( a );
a.tojson = function() ; //序列化僅包含b
};json.stringify( a );
json.stringify() 傳遞乙個可選引數 replacer
當replacer是函式的時候,k在第一次呼叫時為undefined,而在遍歷到d時,k會變成陣列的索引 0,1,2var a = ;
json.stringify( a, ["b","c"] ); //""
json.stringify( a,function(k,v) ); //""
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
真值就是除假值之外的值
數字與字串之間的轉換
顯式轉換中帶有的隱式轉換,js引擎會自動為42建立乙個封裝物件 ,然後對該物件呼叫tostring()方法var a = 42;
var b = string( a );
var c = "3.14";
var d = number( c );
b; //"42"
d;
日期顯式轉換為數字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()可以將結果進行強制型別轉換
~~中的第乙個~執行toint32並反轉字位,然後第二個~再進行一次字位反轉,即將所有字位反轉回原值,最後得到的仍然是toint32的結果var a = "hello world";
~a.indexof( "lo" ); //-4
if(~a.indexof( "lo" ))
~a.indexof( "ol" ); //0
!~a.indexof( "ol" ); //true
if(!~a.indexof( "ol" ))
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...