2016年10月20日 星期四

公用:globalEval、makeArray、inArray (jQuery29)

※globalEval、eval 的差異

和javascript的eval很像,但是全域的

$(function(){
    test();
});
    
function test(){
    $.globalEval('var xxx = 2;');
    eval('var ooo = 3;');
    console.log('init xxx=' + xxx);
    console.log('init ooo=' + ooo);
}
    
function after(){
    console.log('after xxx=' + xxx);
    // console.log('after ooo=' + ooo); // 執行時錯誤
}
----------
<input type="button" value="click me" onclick="after()" />

※註解那行打開會發生錯誤,因為並不是全域的



※makeArray

故名思義,就是用來產生陣列的

$(function(){
    var arr = $.makeArray($('span'));
    // alert(arr[0].childNodes[0].data);
    // debugger;
    $.each(arr, function(i, v){
        console.log('v=' + v.childNodes[0].data); // s1-->s2
    });
});
----------
<span>s1</span>
<div>d1</div>
<span>s2</span>
<div>d2</div>



※makeArray 使用多層時

$(function(){
    $.each($.makeArray($('li')).reverse(), function(i, v){
        console.log('v=' + v.childNodes[0].data); // s1-->s2
    });
});
----------
<ul>
    U1
    <li>L1</li>
    <li>L2</li>
    <li>
        L3
        <ul>
            U2
            <li>L4</li>
            <li>L5</li>
        </ul>
    </li>
</ul>

※結果如以下畫面


※會發現L3前後都空很大,這是因為HTML有換行的關係,改成以下就不會了

<ul>
    U1
    <li>L1</li>
    <li>L2</li>
    <li>L3<ul>
            U2
            <li>L4</li>
            <li>L5</li>
        </ul>
    </li>
</ul>



※inArray、indexOf 的差異

var str = "abc cba array abc cba";
console.log($.inArray("b", str)); // 1
console.log($.inArray("b", str, 5)); // 5
console.log($.inArray("b", str, -8)); // 15
console.log($.inArray("x", str)); // -1
    
console.log(str.indexOf('b')); // 1
console.log(str.indexOf('b', 5)); // 5
console.log(str.indexOf('b', -8)); // 1
console.log(str.indexOf('x')); // -1
    
console.log($.inArray("ab", str)); // -1
console.log($.inArray("ab", str, 5)); // -1
console.log($.inArray("ab", str, -8)); // -1
    
console.log(str.indexOf('ab')); // 0
console.log(str.indexOf('ab', 5)); // 14
console.log(str.indexOf('ab', -8)); // 0
    
console.log($.inArray("abc", str)); // -1
console.log($.inArray("abc", str, 5)); // -1
console.log($.inArray("abc", str, -8)); // -1
    
console.log(str.indexOf('abc')); // 0
console.log(str.indexOf('abc', 5)); // 14
console.log(str.indexOf('abc', -8)); // 0
    
console.log($.inArray("John", [ 4, "Pete", 8, "John" ])); // 3
console.log($.inArray("Joh", [ 4, "Pete", 8, "John" ])); // -1
    
console.log([ 4, "Pete", 8, "John" ].indexOf("John")); // 3
console.log([ 4, "Pete", 8, "John" ].indexOf("Joh")); // -1

※inArray可以有第三個參數,沒有寫預設是0,表示從第一個字開始找

※用在搜尋字串且找一個字時:相同的地方是
使用正數時,還有找不到時都是-1,只有負數不同

※搜尋兩個字或一個單字時,inArray都是-1,也就是不支援;但indexOf有支援

※搜尋陣列時,inArray和indexOf都一樣

沒有留言:

張貼留言