測試**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 方法 只改變元...