想復習下之前學的js數據類型的知識,主要是總結一下針對string和數組的各種操作。
一,javascript有5種數據類型。
1.Undefined(未定義)
2.Null
3.Boolean(布爾值,true or false)
4.Number(數值,例如1)
5.String(字符串)
6.Object(對象)
二,typeof操作符
用來檢測數據類型的操作符(不是函數),會根據值的數據類型的不同返回不同的值。
undefined-如果這個值未定義
boolean-如果這個值是布爾值
string-如果這個值是字符串
number-如果這個值是數值
object-如果這個值是對象或者null,因為null指向的是一個空的對象指針,所以typeof會返回object而不是null。
function-如果這個值是函數
三,各種數據類型
1.Undefined
這個類型只有一個值,就是undefined,在聲明了變量但還未賦值的時候,這個就是undefined。例如:
var message;
typeof(message) //undefined
2.Null類型
這個類型也是只有一個值,null,從邏輯上說,這個指向一個空的對象。所以用
var call = null;
typeof(call)//object
所以,如果要用使用對象,可以先聲明它等于null。
3.Boolean類型(這個著重說一下JS布爾值的自動轉換)
有true和false兩種,要區分大小寫,True和False只是標識符。
有一個轉換函數Boolean(),可以將其它數據類型轉換為布爾值。
數據類型 ? ? ? ? ? ?轉換為true ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 轉換為false
字符串? ? ? ? ? ? ? ? 任何非空字符串 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?“”(空字符串)
Number ? ? ? ? ? ? ? 任何非零字符串 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0和NaN
Object ? ? ? ? ? ? ? ? ?任何對象 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? null
Udefined ? ? ? ? ? ? ? 不能轉換為true ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? undefined
對于if(message)中的message會自動執行布爾值轉換。
還有一些操作符比如,===,==,>=等也會先進行布爾值轉換,運算出來的結果可能有點奇怪。下面有個我不知道在哪找到存手機的真值表。可以時常拿出來看看。
3.Number類型
浮點運算采用雙精度數值(IEEE754格式),會出現0.1+0.2 != 0.3的情況!
其實是等于0.30000000000000004,為什么會這樣呢?這里稍微提下,是因為都會先將小數轉換為雙精度對應格式的二進制然后做加法,最后再轉換回來。具體計算方式這里不贅述了,有興趣的可以看看這個雙精度浮點數運算
進制表示方法
十進制:55,
八進制:070(8進制的56)8進制前面加0,不能超過8,08會自動解析為8。但在嚴格模式下無法識別,ES6新增了0o的表示方法。
十六進制:0xA,16進制的10。0-9,A-F。
內存限制,最小值,5e-324,最大值1.7976931348623157e+308,如果超出這個范圍,正數則是正無窮Infinity(Number.MAX_VALUE),負數則是負無窮-Infinity,正負無窮無法參加下一次運算。有一個函數可以確認是否有窮,是isFinite(),有窮返回true,無窮返回false。
NaN(Not a Number)
var result = 4/0 //NaN
需要注意的是NaN與任何值都不相等,包括它自己。很奇葩吧,如何判斷是不是NaN呢?用isNaN()來判斷就好了呀!這個函數會嘗試把傳進去的參數轉換成為數值,不能轉換就會返回true,比如字符串或者布爾值。
如何將其它數據類型轉換為數值呢?JS提供了三個函數:Number(),parseInt(),parseFloat()。
Number(true)//1
?Number(false)//0
Number(011)//9(8進制)
Number('02323') //2323,Number('') //0
Number('hello') ?//NaN,Number('')
Number(null) //0
Number(undefined) //NaN
一般處理正數的時候用parseInt()
parseInt('') ?//NaN
parseInt('123fdasfasf') //123
parseInt('agasdf') //NaN
parseInt(22.5) //22,向下取整數,只保留整數 ? Math.ceil(22.5)//向上取整,Math.round(22.4)//22 四舍五入
parseInt(070) //56 八進制
parseInt('070') //70并不會識別8進制哦
還可以添加第二個參數作為進制基數哦~就是把傳入的第一個參數用后面一個參數規定的進制解析,比如:
parseInt(‘10’,2)//2
parseInt('0xf',16) //15可以識別哦~
parseInt('0o10',8) //0,但是8進制寫法的字符串還是無法識別,就是不喜歡8進制,任性。
parseFloat()也是從第一個字符開始解析,一直解析到字符串的末尾或者遇到第一個無法識別的。第一個點有效,第二個就無效了哦,比如:
parseFloat('22.4.5.7')//22.4
parseFloat("2323dfdf") //2323 也是可以返回整數的哦
parseFloat('0xA') //返回0,16進制格式的字符串始終會被轉換為0
4.String類型
需要注意的第一個就是轉義序列
\n 代表換行;\t 制表;\b 空格;\r回車;\f 進紙(喵喵喵???不是很懂,是給打印機識別用的??);\\就是斜杠;\xnn 以16進制表示的一個字符,n為0-f;\unnn 以16進制代碼nnn表示一個Unicode字符,要比nn表示的多。
console.log('\x44') //D
字符都有lenght屬性,可以調用,查看字符長度,上面說到的\* 也是會算長度的哦~
中文字符也只算一個長度。
var a = '的等等';
console.log(a.length);//3
字符串和數值都是基礎類型,創建了就不可變,要更改只能銷毀重新分配儲存空間。
轉為字符串
使用toString()的方法轉為字符串。
待更。。。