
相關理論概念:
直接量的概念:直接描述某個(些)存儲空間的值的量,如變量的值、對象的值、數組的值。
數據類型:在數據結構中的定義是一個值的集合以及定義在這個值集上的一組操作。
1、變量的聲明和使用
變量:是計算機語言中能儲存計算結果或能表示值抽象概念。變量可以通過變量名訪問。
語法規則:
var 變量名;
然后進行賦值:num=10時直接賦值:
var num=10;
良好的變量命名方式:
- 變量必須以字母開頭;
- 變量名稱對大小寫敏感(y 和 Y 是不同的變量);
- 變量名應當總是遵守駝峰大小寫命名法,並且命名前綴應當是名詞。
代碼示例:
//好的寫法:
var count = 10;
var myName = "Nicholas";
var found = true;
//不好的寫法:
var getCount = 10;
var isFound = true;
2、數據類型

| 數據類型 | 含義 |
| undefined | 未定義 |
| null | 空 |
| string | 字符串類型 |
| boolean | 布爾類型 |
| number | 數值類型 |
注意:
- 居然undefined和null的含義不同,但undefined實際上是由null派生來的,ECMAScript把它們定義為相等的。
- number類型既可以表示32位整數,還可以表示64位浮點數。
-
is not defined與undefined的區別:is not defined是未聲明定義,找不到。undefined是已定義在目錄文件中未找到。
一、基礎數據類型:
1、undefined:
undefined是一個特殊值,那些沒被變量初始化的變量都有一個初始值,即undefined,表示這個變量等待被賦值。
代碼示例:
//不好的寫法
var person;
console.log(person===undefined); //true
//foo未被聲明
var person;
console.log(typeof person); //"undefined"
console.log(typeof foo);//"undefined"
//好的寫法,建議使用null
var person =null;
console.log(person=== null);
2、null
null是一個特殊值,但我們常常誤解它,將它和undefined搞混。在以下場景中應當使用null.
- 用來初始化一個變量,這個變量可能賦值為一個對象。
- 用來和一個已經初始化的變量比較,這個變量可以是也可以不是一個對象。
- 當函數的參數期望是對象時,用作參數傳入。
- 當函數的返回值期望是對象時,用作返回值傳出
還有以下兩個場景不應當使用null.
- 不要使用null來檢測是否傳入了某個參數。
- 不要使用null來檢測一個未初始化的變量
代碼示例:
//好的用法
var person = null;
//好的用法
function getperson () {
if (condition){
return new person ("Nicholas");
} else {
return null;
}
}
//好的用法
var person = getPerson ();
if(person != null ){
dosomething();
}
//不好的寫法:用來和未初始化的變量比較
var person;
if (person !=null){
dosomething();
}
//不好的寫法:檢測是否傳入了參數
function dosomething (arg1,arg2,arg3,arg4) {
if ( arg4 != null){
dosomethingElse();
}
}
注意:最好把null理解為占位符(placeholder)。
檢測屬性避免非空比較:
另外一種用到null(以及undefined)的場景是當檢測一個屬性是否在對象中存在時,比如:
//不好的寫法:檢測假值
if ( object[propertyName]) {
//一些代碼
}
//不好的寫法:和null相比較
if( object[propertyName] != null){
//一些代碼
}
//不好的寫法:和undefined比較
if (object[propertyName]){
//一些代碼
}
注意:建議使用in運算符進行判斷屬性。
如果實例對象的屬性存在、或者繼承自對象的原型,in運算符都會返回true.比如:
var object = {
count:0;
related: null;
};
//好的寫法
if( "count" in object){
//這里的代碼會執行
}
//不好的寫法:檢測假值
if ( object["count"]){
//這里的代碼不會執行
}
//好的寫法
if ( "related" in object) {
//這里的代碼會執行
}
//不好的寫法:檢測是否為 null
if ( object["related"] !=null ){
//這里的代碼不會執行
}
//對於所有非dom對象來說,這是好寫法
if (object.hasOwnProperty("related")){
//執行這里的代碼
}
//如果你不確定是否為dom對象,則這樣寫
if ("hasOwnProperty" in object && object.hasOwnProperty("related")){
//執行這里的代碼
}
hasOwnProperty方法的使用:
- 如果你檢查實例對象的某個屬性是否存在, 可以使用它。因為所有繼承obj的javaScript對象都有這個方法。
- 如果實例中存在這個屬性的返回true。注意:如果這個屬性存在於原型里,則返回false。
注意:
- 在IE8以及更早版本的IE中,DOM對象並非繼承自object,因此也不包含hasOwnProperty方法,也就是說,你在調用dom對象的hasOwnProperty方法之前應當先檢測其是否存在(假如你已經知道對象不是dom,則可以省略這一步)。
- 不管你什么時候需要檢測屬性的存在性,請使用in運算符或者hasOwnProperty方法這樣可以避免很多bug。
3、string 字符串類型
在javaScript中所有字符是16位的,使用的是Unicode字符編碼集。可以使用單引號或雙引號來表示,它可能包含0個或多個字符。
在javaScript中沒有字符類型的概念,若需要轉義字符則使用/(斜杠)+符號或相關的字母來表示。
javaScript中字符串的編碼風格:
- 建議使用雙引號來表示一個字符串。Crockford的編程規范和jquery的核心風格指南都是使用雙引號來表示。利於開發效率,上下文編碼規范統一,因為如java等語言的字符串是使用雙引號來表示的。
- 谷歌則是使用單引號來表示。
相關示例:
//不好寫法
var longString ="Here's the story , of a man \ named Brady.";
//好的寫法
var longString ="Here's the story , of a man " + " named Brady.";
4、boolean 布爾類型
布爾(邏輯)只能有兩個值:true 或 false。
相關示例:
var x=true;
5、number類型
javaScript只有一個數字類型,它在內部被表示為64位的浮點數,類似於java的double浮點類型。
在javaScript中1和1.0的值相同,在java等語言中是不等價的,是兩種數字類型。
相關示例:
//整數
var count =10;
//小數
var price = 10.0;
var price =10.00;
//不推薦的小數寫法:沒有小數部分
var price = 10.;
//不推薦的小數寫法:沒有整數部分
var price = .1;
//不推薦的寫法:八進制寫法已被棄用了
var num = 010;
//十六進制寫法
var num = 0xA2;
//科學計數法
var num = 1e23;
二、引用類型
1、數組
數組:在數據結構中編號的值是有序集合。
下面的代碼創建名為 cars 的數組:
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
或者 (condensed array):
或者 (literal array):
2、對象
對象:將一組數據與這組數據有關操作組裝在一起,形成一個實體,在數據結構中編號的值是無序集合,這個實體就是對象。包含行為和相關屬性。
對象由花括號分隔。在括號內部,對象的屬性以名稱和值對的形式 (name : value) 來定義。屬性由逗號分隔:
上面例子中的對象 (person) 有三個屬性:firstname、lastname 以及 id。
空格和折行無關緊要。聲明可橫跨多行:
firstname : "John",
lastname : "Doe",
id : 5566
};
對象屬性有兩種尋址方式:
name=person["lastname"];
3、函數
函數的作用是封裝相關數據或組件用的。
函數就是包裹在花括號中的代碼塊,前面使用了關鍵詞 function:
{
//執行代碼
}
當調用該函數時,會執行函數內的代碼。
可以在某事件發生時直接調用函數(比如當用戶點擊按鈕時),並且可由 JavaScript 在任何位置進行調用。
3、運算符
運算符用於執行程序代碼運算,會針對一個以上操作數項目來進行運算。























