Jquery學習

  • 87
  • 0
  • 2017-12-17

Jquery學習

判斷一個物件是否存在 確認是否有JQuery

EX: if (!jQuery) { throw new Error("Bootstrap requires jQuery") }

! logical not
var a = "";
var b = 0;
var c = undefined;
var d = null;
var e;//同undefined
var f = {};
var g = [];
console.log(!a);//true
console.log(!b);//true
console.log(!c);//true
console.log(!d);//true
console.log(!e);//true
console.log(!f);//false
console.log(!g);//false

比較運算元

== equal to
=== equal value and equal type
!= not equal
!== not equal value or not equal type

Javascript 可以針對全部或某個Function加上 嚴格模式

 "use strict";//使用strict mode(嚴格模式)

產生物件的另一種方法

Object Constructor (用一個function 配合this產生物件)

記得加new 

function Person(first, last, age, eye) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eye;
}
var myFather = new Person("John", "Doe", 50, "blue");
var myMother = new Person("Sally", "Rally", 48, "green");
console.log(myFather.age);
console.log(myMother .age);
//50
//48

Javascript內建 建構子

var x1 = new Object();    // A new Object object
var x2 = new String();    // A new String object
var x3 = new Number();    // A new Number object
var x4 = new Boolean();   // A new Boolean object
var x5 = new Array();     // A new Array object
var x6 = new RegExp();    // A new RegExp object
var x7 = new Function();  // A new Function object
var x8 = new Date();      // A new Date object
//===========================================
var x1 = {};            // new object
var x2 = "";            // new primitive string
var x3 = 0;             // new primitive number
var x4 = false;         // new primitive boolean
var x5 = [];            // new array object
var x6 = /()/           // new regexp object
var x7 = function(){};  // new function object

只是用以下這種方式宣告的物件型態不同 使用比較運算元(===)時 就要小心 會不一致

能用Primitive的就用 速度較快

var x = "John";
var y = new String("John");
var z = new String("John");
var zz = z;

// typeof x will return string
// typeof y will return object
// (x == y) is true because x and y have equal values
// (x === y) is false because x and y have different types (string and object)
// (y == z) is false because y and z are different objects
// (y === z) is false because y and z are different objects
// (z === z) is true because zz and z are same objects

JQuery擴充方法

有幾個技巧

1.(function(){ ... })();把所有的 code 包起來,這樣的作法是確保你裡面寫的 code 不會成為全域變數,你不會希望你寫的這個function跑去window底下的屬性,而如果寫成(function($){ .... })(jQuery); 表示將 $ 定義成 jQuery 物件,好讓這個 function 中可以直接使用 $ 不造成混淆,大多 jQuery plugin 都會用這個方式包裝起來。

補充說明

JS匿名函數宣告完立即執行常見寫法

(function() { /* code */ })();

1、包圍函數(function(){})的第一對括號向腳本返回未命名的函數,隨後一對空括號立即執行返回的未命名函數,括號內為匿名函數的參數。

2、使用括號包裹定義函數體,解析器將會以函數表達式的方式去調用定義函數。也就是說,任何能將函數變成一個函數表達式的作法,都可以使解析器正確的調用定義函數。而 ! 就是其中一個,而 + - || 都有這樣的功能。

3、該函數的作用主要為 匿名 和 自動執行(bootstrap使用+function($){}(window.jQuery))

+function(){}(); //這裏的+,也可以替換成!,~等其他一元操作符
(function() { console.log("Foo!"); })(); 
// or 
(function() { console.log("Foo!"); }()); 

閱讀延伸 建構函式和普通的函式 差異 這篇寫得很清楚

jQuery 原始碼說明

2.$.fn.extend({ ... }) 是為了擴充 jQuery.fn (= jQuery.prototype=jQuery這個物件),為了讓我們之後定義的函式會跟原本 jQuery 提供的函式有相同的結構,所以擴充的內容會寫在 $.fn.extend({ ... }) ,所以之後用$.就可以點出這個新的屬性。口訣:$是jQuery物件 ,fn是jQuery prototype的簡寫

可以透過.fn返回jQuery.prototype物件直接增加method 擴充jQuery物件方法 類似我們C#的靜態方法

$.fn.callMeAlert=function(){alert('hi')};
$('body').callMeAlert();//alert 'hi'