国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

簡述javascript中的對象和數組的應用技巧

2024-05-06 15:45:10
字體:
來源:轉載
供稿:網友

Javascript已經使用了很多年了,但是對于對象和數組等細節仍然知之甚少,并且使用了一些最基本的操作,下文是錯新技術頻道小編簡述javascript中的對象和數組的應用技巧,一起進入下文了解一下吧!

這是我學習的一個壞習慣--懶,很多東西都是了解而已,看到稍微復雜點的邏輯就沒有耐心。就像學asp時不知道asp跟腳本的關系,學html不知道什么是DOM...結果是學得慢且不扎實,碰到稍復雜的問題就歇菜(扯遠了)。
今天繼續優化腳本,嘗試著合并一些數組時碰到問題,才算去仔細看了手冊,做了一些測試。

javascript1.2之后允許使用[]創建數組:


var firstArray = [];
var secondArray = ["red", "green", "blue"];
var thirdArray = [,,,,];

可以在數組創建后添加元素:

secondArray[4] = 28;

這樣的結果是第4個元素和第2個元素之間有1個空元素。
結果類似這樣:["red", "green", "blue",,28]
需要注意的是,數組必須初始化,我測試了數組作為數組元素的定義:

var arrArray = [[]];

本來設想實現二維數組,結果是使用arrArray[i][0]當i>0時無效!
仔細看一下才明白,其實是定義了arrArray[0]為一個空數組,而其他元素都未定義,相當于
var arrArray=[];
arrArray[0]=[];
所以arrArray[1]沒有定義,所以如果將它作為數組進行操作會出錯。

刪除一個數組元素:delete



var myColors = ["red", "green", "blue"];
delete myColors[1];
alert("The value of myColors[1] is: " + myColors[1]);

delete的結果是myColors[1]=undefined,但是myColors.length不變,myColors變成這樣:["red",, "blue"]

替換或絕對刪除數組元素用slice():


var myArray = [1, 2, 3, 4, 5];
myArray.slice(2); // returns [3, 4, 5]
myArray.slice(1, 3); // returns [2, 3]
myArray.slice(-3); // returns [3, 4, 5]
myArray.slice(-3, -1); // returns [3, 4]
myArray.slice(-4, 3); // returns [2, 3]
myArray.slice(3, 1); // returns []

var myArray = [1, 2, 3, 4, 5];
myArray.splice(3,2,''a'',''b'');
// returns 4,5 [1,2,3,''a'',''b'']
myArray.splice(1,1,"in","the","middle");
// returns 2 [1,"in","the","middle",3,''a'',''b'']


看了文檔才知道,數組是傳遞引用的!


var x = [10, 9, 8];
var y = x;
x[0] = 2;
alert("The value of y's first element is: " + y[0]);

你猜結果是多少呢?
再看這個:

// Declare a reference type (array)
var refType = ["first ", " second", " third"];

// Declare a primitive type (number)
var primType = 10;

// Declare a function taking two arguments, which it will modify
function modifyValues(ref, prim)
{
ref[0] = "changed"; // modify the first argument, an array
prim = prim - 8; // modify the second, a number
}

// Invoke the function
modifyValues(refType, primType);
// Print the value of the reference type
document.writeln("The value of refType is: ", refType+"<
>");
// Print the value of the primitive type
document.writeln("The value of primType is: ", primType);


測試時發現一個問題:


var arr=[];
arr['a']=1;
arr['b']=2;
alert(arr.length);

彈出的數字是0!
看了文檔后知道,這樣的數組叫做聯合數組(Associative Arrays),arr['a']等同于arr.a,arr.length也就等同于arr['length'],而arr.length在我們初始化arr(var arr=[];)的時候自動賦值為0。
有人把這種聯合數組叫做javascript的hash table。嚴格上講,聯合數組和普通數組本身都是對象(廢話,javascript中的一切都是對象- -),意義和用法都是相同的。看下面的例子:

var arr=[];
arr=[1,2,3];
arr.test='test';
alert(arr);
alert(arr[1]);
alert(arr['test']);

var arr={}; arr=[2,3,4]; alert(arr[0]);
var arr={};和var arr=[]都可以寫成var arr=function(){};
從上面的代碼可以看出,下標數組跟聯合數組分別獨立,下標只作用于下標數組,不能訪問聯合數組,相應的,聯合數組不對length屬性產生影響。聯合數組的標簽就是屬性,但是下標數組的下標并不是屬性,arr[0]!=arr.0,訪問arr.0會出錯。

在某些時候,用arr['a']代替arr.a作為方法調用會更有效,因為arr['a']中的'a'可以用變量傳入,比如將方法賦給變量:


var d=document,l=links;

這時候用直接d.l就會出錯,而用d[l]就可以正確執行,alert一下就知道了:)

alert(d.l);//腳本錯誤
alert(d[l]);//顯示object

既然數組是由lenght屬性的對象,那么是不是所有具有length屬性的對象都是數組呢?比如String。測試之后發現,firefox是可以把String當作數組處理的,但是ie不行:


var myString = "Hello world";
alert(myString.length);
alert(myString[0]);

數組的對象應該比較獨特,用戶對象不能完全模擬:



function myarray(size){
this.length=size;
var x=0;
}
var arr=new myarray(5);
arr[9]=1;
alert(arr);
alert(arr[9]);
alert(arr.length);

本以為Array的length屬性就是普通的對象屬性,結果經過上面的例子發現,arr的length不再是數組length,arr的結構也不是普通數組結構。

定義一個函數/類的方法有好幾種:


function fName(arguments){
//function body
};

var fName = function(arguments){
//function body
}

var fName = new Function("arguments","/*function body*/");


第三種方法比較好玩,看下面的例子:

var arr=new Function("var total=0; for (var i=0; i

用這個方法可以解析ajax返回的JSON,這樣就不用低效的eval了(沒有測試是否比eval快):
假設{b:{c:2}}為返回的json字符串:


var arr=new Function("this.a={b:{c:2}};");
var aa =new arr();
alert(aa.a.b.c);

以上就是簡述javascript中的對象和數組的應用技巧,更多內容盡在錯新技術頻道網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 杂多县| 望谟县| 德保县| 江安县| 大渡口区| 博白县| 汨罗市| 井陉县| 湖州市| 安康市| 天柱县| 莲花县| 二连浩特市| 晋江市| 阳曲县| SHOW| 汨罗市| 阿勒泰市| 鄂伦春自治旗| 黔南| 保德县| 沂水县| 贺兰县| 甘孜| 英吉沙县| 龙胜| 石柱| 贺州市| 高邮市| 鄂温| 察隅县| 都江堰市| 馆陶县| 蓬安县| 鞍山市| 贵阳市| 土默特右旗| 石棉县| 永靖县| 商城县| 大邑县|