零JS筆記 | 數據類型
JS中的數據類型:number(NaN) string boolean function object(fn,[],{},null) undefined
var str = 'abc';
str.charAt(3) //下標
var obj = window; //object
var arr = [1] //
console.log(typeof arr); //object
function fn() {
alert(this)
}
console.log(typeof fn); //function
obj.fn1 = function () {
alert(1)
}
console.log(typeof obj.fn1); //object
var json = {
name: 'elmok'
}
console.log(typeof json); //object
var u;
alert(u) //undefined 表示一種狀態
alert(typeof u) //undefined
顯式類型轉換:Number(),parseInt(),parseFloat()
//字符串轉數字 Number()
//可轉換的類型
var a = '100'
alert(a + 100) // '100100'
alert(Number(a) + 100) // 200
var b = '000100';
alert(Number(b)) //100
var c = '+100'
alert(Number(c)) //100
var d = ''; //d = ' '
alert(Number(d)); //0
var e = true
alert(Number(e)) //1
var arr = [] //['']-->0 [1,2,3]-->NaN ['123']-->123
alert(Number(arr)) //0
var f = null
alert(Number(f)) // 0
//可轉換類型:parseInt(),parseFloat()
var i = '100px'
alert(parseInt(i)) //100,從左到右查看,若有非數字,則截斷;
var j = '+100'
alert(parseInt(j)) //從左到右,如遇到 + - 空格,則例外
var l = '100px'
alert(parseInt(l, 8)) // parseInt(l,進制)
var k = '10.1231231231元'
alert(parseFloat(k)) // 10.1231231231
//判斷是否有帶小數點 parseInt(n) == parseFloat(n)
無法轉換的數據類型:
1、NaN: not a number //不是數字 的 數字類型;
2、出現NaN表示進行了非法的操作;
3、NaN ==> false;
4、自已不等於自己;
5、isNaN 不是數字 返回true, 數字返回false
6、isNaN內部依靠Number()轉換
var fn = function () {
}
alert(Number(fn)) //NaN
var json = {
} //json無法轉
alert(Number(json)) //NaN
var g; //undefined
alert(Number(g)) //NaN
var h = '100px'
alert(Number(h)) //NaN
var o = Number('abc')
alert(o) //NaN
alert(typeof NaN) // number
//isNaN 不是數字 返回true, 是數字返回false ,即Number()能轉換的
alert(isNaN(123)) //false
alert(isNaN('abc')) //true
alert(isNaN(function () {
alert(1)
})) //true
alert(isNaN('250')) //false ,使用Number('250')轉成250數字後返回false
alert(isNaN(true)) // false
alert(isNaN([])) //false
alert(isNaN(NaN)) //true
inp[1].onclick = function () {
if (isNaN(inp[0].value)) { //有缺陷,如輸入 空格、true false
alert('不是數字')
}
else {
alert('是數字')
}
}
if (NaN) {
alert('真')
}
else {
alert('假')
}
隱式類型轉換: - * / % 可讓字符串變成數字 + 可讓數字變成字符串 ++ -- 變成數字 > < 數字比較,字符串比較 !轉成布爾值 ==
alert(100 - '1') //99
alert('100' + 1) // 101
var n = '10'
alert(n++) //11
alert('10' > 5) // true '10'被轉成數字10
alert('10' < '5') // true 編碼位置比較
alert(!true) //false
alert(!'ok') //false
alert('2' == 2) //true
小技巧:
找字符:判斷typeof == 'string';
找數字:判斷typeof=='number' && 排除屬性NaN的數字類型:!isNaN(obj)
找可以轉成數字的:parseFloat(arr[i])==parseInt(arr[i])
找NaN:判斷typeof==='number' && 並且屬性不是數字:isNaN(obj)
var arr = [ '100px', 'abc'-6, [], -98765, 34, -2, 0, '300', , function(){alert(1);}, null, document, [], true, '200px'-30,'23.45元', 5, Number('abc'), function(){ alert(3); }, 'xyz'-90 ]
//找到數字,排除布爾值
for (var i = 0; i < arr.length; i++) {
if ((typeof arr[i]) == 'number' && !isNaN(arr[i])) {
console.log(arr[i])
}
}
//parseFloat会干掉0 所以要加上
var arrN = []
for (var i = 0; i < arr.length; i++) {
if (parseFloat(arr[i]) == parseInt(arr[i])) {
console.log(arr[i]);
arrN.push(arr[i])
}
}
console.log(Max(arrN));
function Max(arr) {
var max = arr[0];
for (var i = 0; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i]
}
}
return max
}
//找字符串
for (var i = 0; i < arr.length; i++) {
if (typeof arr[i] === 'string') {
console.log(arr[i])
}
}
//找到數字類型,並且是NaN
for (var i = 0; i < arr.length; i++) {
if (typeof (arr[i]) == 'number' && isNaN(arr[i])) {
console.log(i + ':' + arr[i]);
}
}