jQuery中的isArrayLike函式

2021-09-30 13:04:30 字數 3311 閱讀 5881

測試**1:

var obj=

alert("length" in obj && obj.length);//第乙個是true,所以返回第二個值,第二個值就是xx

alert("結果是=>"+"length" in obj && obj.length);//第乙個是變成"結果是=>length in obj"顯然直接是false(和+在一起,變成了字串連線),所以&&操作符就直接返回false

alert("結果是:"+("length" in obj && obj.length));//把後面的結果先計算,打上括號就能夠得到正確的結果!

alert(isarraylike(obj));//返回false,因為length不是0,也不是number型別

var obj=

var obj1=

alert(typeof("length" in obj && obj.length));//雖然在物件obj裡面,length沒有打上雙引號,但是「length」 in obj是正確的,同時obj.length是string型別

alert(isarraylike(obj1));//因為obj1的length是0返回true

alert(isarraylike(obj));//因為obj的length是string型別,直接返回false

測試**2:

//測試jquery物件,length直接為number

alert("jquery物件"+isarraylike($("input")));

alert("length" in $("input") && $("input").length)

alert("結果是:"+document.getelementbyid("div1").nodetype);//返回1,元素為1,屬性為2,文字是3,document是9,documentfragment是11

測試**3:

var obj=

alert(isarraylike(obj))//返回true

var obj=

alert(isarraylike(obj))//false

測試**4:

var obj=

alert(isarraylike(obj));//返回false,因為,雖然length是number型別,同時length>0,但是(length-1) in obj返回false,var obj=也就是一樣的道理。

var obj=//返回結果就是true,因為(4-1) in obj是返回true的

測試**5:

//如果是element元素,也就是nodetype===1,而且含有length屬性

//alert("結果是1:"+document.getelementbyid("div1").length);是undefined,也就是沒有length屬性

"xx")返回的nodetype是1,但是沒有length屬性

"div")的集合有length屬性,但是沒有nodetype,返回的是htmlcollection集合

測試總結:三種情況下返回true。第一種:length恆等於0;第二種:本身就是array型別;第三種:length>0,同時length是number型別,同時(length-1) in obj為true!

isarraylike函式原始碼:『

function isarraylike( obj ) 

if ( obj.nodetype === 1 && length )

return type === "array" || length === 0 ||

//length是數字型別,同時length>0而且length-1要存在

typeof length === "number" && length > 0 && ( length - 1 ) in obj;

}

總結:如果是函式或者window物件,那麼直接是false;如果是陣列那麼返回true;如果有length並且length是0返回true;如果length是number同時length>0同時length-1在obj裡面那麼返回true!什麼時候nodetype是1,同時也具有length屬性呢:

var div=$("#content")[0];

div.length=1;//isarraylike檢測返回true

同時所有的jquery物件都是類陣列物件:

isarraylike($("#content"))//列印true

那麼為什麼要對上面length=0進行單獨的判斷呢,請看下面:

function test()

test();//這時候如果沒有length===0那麼就會返回false表示不是類陣列,因此這裡我們對這種情況單獨判斷!

(1)這裡之所以要判斷(length-1) in obj是引入了

稀疏陣列

(4)我們下面給出乙個js中map方法的案例:

var arr=[1,2,3];

function f(elem,index,arr)

//列印[2,4,6]

alert(arr.map(f,12));

//輸出第二個引數[0,1,2]

alert([4,5,6].map(function.prototype.call.bind(number)));

var a = ["aaa ", " bbb", " ccc "]

//列印[aaa,bbb,ccc],這個call方法的this指定的是string.prototype.touppercase

var result=a.map(function.prototype.call, string.prototype.touppercase);

alert(result);

//列印[aaa,bbb,ccc]表示已經去除了兩端的空格了!必須要指定map第二個引數!

var result=a.map(function.prototype.call, string.prototype.trim);

alert(result);

//typeerror說a.map不是乙個函式!,也就是這個function.prototype.call沒有指定this

//而call方法的第乙個引數必須是this!

var result1=a.map(function.prototype.call);

jQuery中的動畫 《鋒利的JQuery》

自css3以來,主流 開始偏向於扁平風格和動畫效果,這時就可以jquery的動畫就可以發揮其長處了,靈活的應用其動畫api,讓我們可以設計出很多絢麗的效果。下面,讓我們來列舉一些jquery常用的動畫api。1 show 和hide 方法 1 從display none還原元素預設或已設定的disp...

jquery學習(六) jquery中的動畫

參考鋒利的jquery第二版 1.show和hide方法 呼叫方法 element.hide 隱藏元素,element.show 顯示元素。其實說白了,其原理就是將元素的樣式display值設定為none或block。若想讓元素慢慢隱藏或顯示,可以為其新增乙個速度的引數,如element.show ...

jQuery 中的動畫

用jquery 做動畫效果要求在標準模式下,否則可能會引起動畫抖動。標準模式即要求檔案頭部包含如下的dtd定義 jquery 中的任何動畫效果,都可以指定3種速度引數,即 slow normal fast 時間長度分別為0.6s,0.4s,0.2s 1.fadein 與fadeout 方法 只改變元...