JavaScript 數值始終是 64 位的浮點數
-
整數(不使用指數或科學計數法)會被精確到 15 位
-
小數的最大數是 17 位
但是浮點的算數並不總是 100% 精準
利用
var x = (0.2 * 10 + 0.1 * 10) / 10;
解決
數字字符串只有 +
時是級聯,其他時候JS會嘗試將字符串轉換爲數字再進行運算
NaN - 非數值
例如:var x = 100 / "Apple";
將得到NaN
使用isNaN()
來確定某個值是否是數
NaN
是數,typeof NaN
返回 number
NaN == / === NaN
// false
對象之間無法比較
數組方法
-
toString()
將數組轉換爲數組值(逗號分隔)的字符串而
join()
方法可以規定分隔符所有對象都有
toString()
方法,如果需要數組原始值,則輸出時自動轉換爲字符串,可以不使用toString()
-
pop()
和push()
pop()
刪除數組最後一個元素,返回被彈出的值push()
在數組結尾處添加一個新元素,返回新數組長度 -
shift()
和unshift()
shift()
刪除數組首個元素,並將其他元素位置至更低索引,返回被彈出的值unshift()
在數組首部添加新元素,並反向位移舊元素,返回新數組長度 -
使用
length
屬性向數組追加新元素arr[arr.length] = "nice"
-
delete
運算符delete arr[1]
但是會在數組留下未定義詞
undefined
-
splice()
arr.splice(2,2,"nice","well")
第一個參數定義添加元素的位置,第二個參數定義刪除元素個數
其餘參數定義需添加的元素,返回一個包含被刪除項的數組
利用
arr.splice(0,1)
刪除-某個元素,卻不留空洞、空值 -
concat()
var arr1 = [ , ]; var arr2 = [ , ]; var arr3 = arr1.concat(arr2);
concat()
不改變現有數組,返回新數組,可設置任意數量的數組參數或值 -
slice()
arr2 = arr1.slice(1,3)
,1爲開始位置,3爲結束位置,也可以忽略結束參數
數組排序
sort()
方法以字母順序對數組進行排序,不可對數字排序(需結合比值函數)
reverse()
反轉數組元素順序,可以結合 sort()
進行降序排序
比值函數
function(a,b){return a-b}
function(a,b){return b-a}
降序
arr.sort(function(a,b){return a-b})
排列數組
-
隨機順序
arr.sort(function(a,b){return 0.5 - Math.random()})
0.5減去一個隨機數(0至1) -
查找最大、最小值
Math.max.apply(null, arr);
Math.min.apply(null, arr);
自制函數function myArrayMax(arr) { var len = arr.length var max = -Infinity; while (len--) { if (arr[len] > max) { max = arr[len]; } } return max; }
-
排序對象數組
即使對象擁有不同數據類型的屬性,sort() 方法仍可用於對數組進行排序
-
通過比較函數來對比屬性值
根據年份對汽車排序:
cars.sort(function(a, b){return a.year - b.year});
-
比較字符串屬性會稍複雜
cars.sort(function(a, b){ var x = a.type.toLowerCase(); //整體字母小寫 var y = b.type.toLowerCase(); //整體字母小寫 if (x > y) {return 1;} //比較如果大於爲正值 if (x < y) {return -1;} //比較如果小於爲負值 return 0; });
數組迭代 value項目值 index項目索引 array數組本身 total總數
-
forEach()
方法爲每個數組元素調用一次函數(回調函數)var txt = ""; var numbers = [45, 4, 9, 16, 25]; numbers.forEach(myFunction); function myFunction(value, index, array) { //需要什麼參數調用什麼 txt = txt + value + "<br>"; }
-
map()
方法通過對每個數組元素執行函數來創建新數組,不會更改原始數組,不會對沒有值的數組元素執行函數var numbers1 = [45, 4, 9, 16, 25]; var numbers2 = numbers1.map(myFunction); function myFunction(value, index, array) { return value * 2; }
-
filter()
方法創建
一個包含通過測試的數組元素的新數組var numbers = [45, 4, 9, 16, 25]; var over18 = numbers.filter(myFunction); function myFunction(value, index, array) { return value > 18; }
-
reduce()
方法在每個數組元素上運行函數,以生成(減少它)單個值,在數組中從左到右工作,不會減少原始數組
reduceRight()
方法在每個數組元素上運行函數,以生成(減少它)單個值,在數組中從右到左工作,不會減少原始數組var numbers1 = [45, 4, 9, 16, 25]; var sum = numbers1.reduce(myFunction/*(,begain)接受初始值*/); function myFunction(total, value, index, array) { return total + value; }
-
測試數組值
every()
方法檢查
所有
數組值是否通過測試var numbers = [45, 4, 9, 16, 25]; var allOver18 = numbers.every(myFunction); function myFunction(value, index, array) { return value > 18; }
some()
方法檢查
某些
數組值是否通過了測試var numbers = [45, 4, 9, 16, 25]; var someOver18 = numbers.some(myFunction); function myFunction(value, index, array) { return value > 18; }
-
檢索項目
indexOf()
和lastIndexOf()
方法在數組中搜索元素值並返回其位置array.indexOf(item, start)
item
必需,要檢索的項目start
可選,從哪裏開始搜索,負值將從結尾開始數的給定位置開始,並搜索到結尾(indexOf()
)或開頭(lastIndexOf()
) -
find()
方法返回通過測試
函數的第一個
數組元素的值
findIndex()
方法返回通過測試
函數的第一個
數組元素的索引
var numbers = [4, 9, 16, 25, 29]; var first = numbers.find(myFunction); function myFunction(value, index, array) { return value > 18; }