JavaScript陣列的一些奇葩行為_javascript技巧
在程式語言中數組的重要性不言而喻,JavaScript中數組也是最常使用的物件之一,數組是值的有序集合,由於弱類型的原因,JavaScript中數組十分靈活、強大,不像是Java等強型別高階語言陣列只能存放相同型別或其子型元素,JavaScript在同一個陣列中可以存放多種型別的元素,而且是長度也是可以動態調整的,可以隨著資料增加或減少自動對數組長度做更改。
今天,複習了一下JavaScript的數組,然後,把他的一些奇葩行為總結了一下,在這裡和大家share一下,如果有不對的地方,歡迎指出!
奇葩1:Array()建構子函式可以不使用new關鍵字來呼叫:
Array()建構器使用傳遞給他的參數作為數組的元素,從而創建數組,一般的,我們是如下調用的:
var a = new Array(1, 2, "bom!"); a.length; //3 console.log(a); //[1, 2, "bom!"]
但是,省略掉new也是可以的,如下:
var a = Array(1, 2, "bom!"); a.length; //3 console.log(a); //[1, 2, "bom!"]
雖然,我不知道他的內部實作機制是什麼,但是,猜想他的建構函式可能是如下定義的:
function Array(args) { //如果,this不是Array的实例的话, //说明不是通过new调用的,则在这里再重新调用 if( !this instanceof Array) { return new Array(args); }//后面是正常调用时的实现代码<br />//...<br />}
奇葩2:當只傳一個參數給建構子時,行為莫測
如果只傳一個參數,而這個參數是一個整數,將會得到一個數組,並且length等於這個參數
var a = new Array(12); console.log(a.length); //12 console.log(a); //[]
如果只傳一個浮點數,就會報錯:
var a = new Array(1.1); //Uncaught RangeError: Invalid array length(…)
傳遞一個字串就會正常運作,並且該字串作為數組的第一個元素:
var a = new Array("1.1"); console.log(a.length); // console.log(a); //["1.1"]
但為了避免二義性,我建議最好是直接使用字面量的形式來建立陣列:
var a = []; //空数组 var a = [1, 1, "bom"]; //三个元素 var a = [12]; //一个元素,并且元素是12
奇葩3:陣列的length屬性可以被修改(可寫)
如下,我們直接把本來是2的length改成了100,而且還修改成功了! ! !
var a = [1, 2, 3, 4]; console.log(a.length); //4 a.length = 100; console.log(a.length); //100
雖然length等於100,但是,元素a[4]-a[99]是不存在的,並且如果你請求他們的值的話,例如,從0到a.length做一個循環中做的話,那麼會得到undefined。
接下來再看:
var a = [1, 2, 3, 4]; a.length = 100; console.log(a[10]); //undefined console.log(99 in a); //false
與下面的例子有點相似:
var a = [1, 2, 3, 4]; a[99] = undefined; console.log(a.length); //100
不同之處在於,這裡的a[99]存在了,因為我們創建了它,即使他擁有的是undefined的值。但是從a[4]到a[98]的所有元素則是不存在的,如下:
var a = [1, 2, 3, 4]; a[99] = undefined; console.log(99 in a); //true; console.log(98 in a); //false console.log(a.length); //100
以上所述給大家分享了JavaScript陣列的一些奇葩行為,文章寫的不好還請見諒,謝謝!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

方法:1、用shift()刪除第一個元素,語法「陣列.shift()」;2、用pop()刪除最後一個元素,語法「陣列.pop()」;3、用splice()刪除任意位置的元素,語法「數組.splice(位置,個數)」;4、用length刪除尾部的N個元素,語法「數組.length=原數組長度-N」;5、直接賦予空數組「[ ]」來清空元素;6、用delete刪除指定下標的一個元素。

3種轉換方法:1、使用split(),可將給定字串拆分為字串數組,語法「str.split(分隔符號,數組最大長度)」;2、利用擴展運算子「... ”,可迭代字串對象,將其轉為字元數組,語法“[...str]”;3、使用Array.from(),可將字串轉為數組,語法“Array.from(str) 」。

js數組可以轉換成php數組,其操作方法為:1、建立php範例檔;2、使用語法「JSON.stringify()」將js數組轉換為JSON格式的字串;3、使用語法「json_decode() 」將JSON格式字串轉為PHP數組,此處新增了參數true,表示將JSON格式字串轉換成PHP關聯數組。

在 JS 中取得數組長度非常簡單,每個數組都有一個 length 屬性,該屬性傳回數組的最大長度,即其值等於最大下標值加 1。由於數字下標必須小於 2^32-1,所以 length 屬性最大值等於 2^32-1。下面程式碼定義了一個空數組,然後為下標等於 100 的元素賦值,則 length 屬性傳回 101。因此,length 屬性不能體現陣列元素的實際個數。

js陣列刪除某個元素有4種方法,分別是:1、使用splice;2、使用filter;3、使用pop方法和shift;4、使用delete關鍵字。

JavaScript的Array.prototype.sort()方法用於對陣列的元素進行排序。此方法是就地排序,也就是說,它修改原始數組,而不是傳回一個新的排序數組。預設情況下,sort()方法會依照字串Unicode碼點值進行排序。這意味著它主要用於字串和數字的排序,而不是用於物件或其他複雜資料類型的排序。

js數組去重的方法有使用Set、使用indexOf、使用includes、使用filter和使用reduce。 1.使用Set,特點是集合中的元素不會重複;2、使用indexOf,可以傳回指定元素在數組中的第一個索引位置;3、使用includes,可以用來判斷一個元素是否已經存在於數組中;4、使用filter,可以用來篩選元素;5、使用reduce,可以將陣列中的元素壓縮等等。

JavaScript中,可利用length屬性來取得數組長度,語法「數組物件.length」;可使用reduce()或reduceRight()函數來求元素總和,語法「arr.reduce(function f(pre,curr){ return pre+cur})」或「arr.reduceRight(function f(pre,curr){return pre+cur})」。
