介紹 這是紅寶書(JavaScript高級程式設計 3版)的讀書筆記第三篇(靈魂篇介紹),有著剩下的第三章的知識內容,當然其中還有我個人的理解。紅寶書這本書可以說是難啃的,要看完不容易,挺厚的,要看懂更不容易,要熟練js更是難,中間需要不斷的積累與重溫。因此不是讀一兩遍就能把這書吃透,需要多讀,可謂 ...
介紹
這是紅寶書(JavaScript高級程式設計 3版)的讀書筆記第三篇(靈魂篇介紹),有著剩下的第三章的知識內容,當然其中還有我個人的理解。紅寶書這本書可以說是難啃的,要看完不容易,挺厚的,要看懂更不容易,要熟練js更是難,中間需要不斷的積累與重溫。因此不是讀一兩遍就能把這書吃透,需要多讀,可謂溫故而知新,可以為師矣。
很多人看這些厚的書都是三天打魚兩天曬網,很少能看下去,能記住的東西往往前3章的內容,所以我寫博客就是為了能和大家一起來讀這本書,一起學js。
溫馨提示:筆記言辭會有主觀色彩,知識重點記錄。博客內容為基礎,適合初學者。
基本概念(靈魂篇)
上一篇是軀殼篇講的是一些瞭解性的東西,而接下來便說內涵(數據類型和操作符),換作中文來看就如同讓你理解詞和含義,語句的含義,就像將這些字和語句註入靈魂。
同系列:
第一篇:JavaScript--我發現,原來你是這樣的JS(初識、源泉)
第二篇:JavaScript--我發現,原來你是這樣的JS(基礎概念--軀殼,不妨從中文角度看js)
數據類型
js的數據結構有6種,5種基本類型和一種複雜類型。js中不支持任何自定義的數據類型,所以說就這6種就夠了。
5種基本數據類型:
- Undefined
- Null
- Boolean
- Number
- String
1種複雜類型:
- Object類型
1.1 typeof操作符
該操作符可以檢測某變數是什麼數據類型。
typeof返回的值:
- "undefined" -- 表示這個值沒有被定義
- "string" -- 表示這是一個字元串
- "number" --表示這是一個數字類型
- "boolean" --表示是一個布爾型
- "object" --表示這是一個對象
- "function " --表示這是一個函數
特別:對於null,typeof null 會返回"object",因為null表示的是一個空對象的引用
typeof使用例子:
var str = "hello";
var a;
console.log(typeof str) //"string"
console.log(typeof 666) //"number"
console.log(typeof a) // "undefined"
console.log(typeof null) // "object"
1.2 Undefined類型
undefined 類型的值只有一個,undefined。當使用var對變數聲明但沒有進行初始化的時候預設的值就是undefined。
var value ;
console.log(typeof value); // "undefined"
//特別:對於沒有聲明的變數typeof 返回的值也是undefined,例如:
//下麵的a沒被聲明
console.log(typeof a); //"undefined"
1.3 Null類型
Null類型也是只用一個值null,null是一個空對象指針。所以使用typeof檢測時會返回object。
console.log(typeof null); //"object"
註意點:
1.null的使用:在定義的變數將會用來保存一個對象時,那初始化為null,這樣我們就知道該變數將來會引用一個對象。
2.實際上undefined值是派生值null的,因此對他們進行相等性測試會返回true:
console.log(null == undefined); //true
1.4 Boolean類型
boolean類型有兩個值 true和false,其他類型的值都有與這兩個值等價的值,就是說其他類型的值都能轉成這兩值中的其中一個。通過轉型函數Boolean()
註意點:
任何類型的數據都可以調用Boolean()方法,都能返回一個true或false,至於返回什麼,有一定的規則,規則如下:
//對於Undefined
console.log(Boolean(undefined)); //false
//對於String,非空字元串返回true,空字元串返回false
console.log(Boolean("")); //false
console.log(Boolean("hahaha")); //true
//對於Numble類型,任何非0數字返回true,0和NaN返回false
console.log(Boolean(123)); //true
console.log(Boolean(0)); //false
//對於Object,任何對象都返回true
console.log(new Array()); //true
1.5 Number類型
Number 類型就是數字的類型,各種數字都是該類型,包含整數,浮點數。
常見的數字:
//整數
var intNum = 10;
//八進位0開頭
var num1 = 066;
//十六進位0x開頭
var num2 = 0xA;
//浮點數
var floatNum = 0.6;
//極大的數4123000,使用科學表示法e,e6表示10的6次方
var floatNum2 = 4.123e6;
//最大值
Number.MAX_VALUE; //1.7976931348623157e+308
//最小值
Number.MIN_VALUE; //5e-324
//超出最大值時,表示為正無窮
Infinity
//超出最小值時,表示為負無窮
-Infinity
//NaN (Not a Number) 非數值
NaN
//判斷非數值的函數isNaN()
console.log(isNaN(10)) //false
console.log(isNaN("10")) //false,isNaN()會嘗試將字元串轉為數字,此處"10"能轉為10
console.log(isNaN("bey")); //true , "bey"不能被轉成數字
1.6 String類型
String用於表示由零或多個16位Unicode字元組成的字元序列,即字元串。
字元串由單引號(' ')或雙引號(" ")包含。但首尾不能是不同的引號,比如一單一雙。
錯點:
//這樣會報錯
var str = 'javasritp";
特點:
1.拼接字元串使用'+'號
var str1 = "hello";
var str2 = str1 + "world";
console.log(str2); // "hello world"
2.其他類型的數據轉換為字元串使用toString()函數
var num = 123;
var str = num.toString(); //數字123通過toString轉為了字元串
console.log(str); //"123"
//使用""拼接其他數據類型可以轉換成String
var s = 23+""; //"23"
1.7 Object類型
ECMAScript中的對象其實就是一組數據和功能的集合。通過new操作符後跟要創建的對象類型的名稱來創建。
//創建一個Object對象
var o = new Object();
關鍵:
這裡的Object相當於祖宗一樣,創建Object的實例並沒有什麼用處。他像是java中java.lang.Object 對象一樣。
特點:
每個Object類型的實例共有的屬性和方法:
- constructor: 保存著用於創建當前對象的函數。
- hasOwnProperty:用於檢測給定的屬性在當前對象的實例中是否存在。
- isPrototypeOf : 用於檢查傳入的對象是否是當前對象的原型
- propertyIsEnumerble : 用於檢查給定屬性能否使用for-in來枚舉
- toLocaleString() : 返回對象的字元串表示。
- toString() : 返回對象的字元串表示。
- valueOf() : 返回對象的字元串,數值,或布爾表示。通常和toString() 返回的值相同。
操作符(運算符)
接下來是操作數據值的操作符。包含算術操作符,位操作符,關係操作符,相等操作符。
1一元操作符
只能操作一個值的操作符稱為一元操作符。
1.1遞增與遞減:
形式: 這就是自增自減,使用兩個加號(++)或兩個減號(--)
var num = 5;
num++; //相當於num = num+1; 此時num = 6;
num--; //相當於num = num-1; 此時num = 5;
註意點:遞增減的前置型(加減號在數值前面)和後置型(加減號在數值後面);
1.沒區別的情況:當只有唯一一條遞增或遞減操作時,前後不影響結果
var num1 = 5;
var num2 = 5;
num1++; //執行後num1的值會變成6
++num2; //執行num2的值會變成6
2.有區別情況:當操作數在一條語句中進行不僅僅是遞增或遞減操作時
var val1= 5;
var val2 = 5;
var val3 = 20;
var sum1 = val1-- + val3; //sum1等於25
var sum2 = --val2 + val3; //sum2等於24
//此處的val1 和 val2 的值相同但最後結果不同.
//val1是後置,通俗點講就是放到最後才進行自減操作.所以順序是原來的val1值(5)和val3相加後賦值給sum1,最後val1才自減。
//val2是前置,通俗點講前置最大,先進行了自減操作。所以順序是val1自減,後和val3相加最後賦值給sum2
1.2一元加號和減號
形式:在一個數值前使用一個加號或減號。
var num = 100;
//用+正數還是正數,負數還是負數
+num; //100
//用減號就變成相反數
-num; //-100
註意點:當操作的不是數字時,使用+,-可以使其執行轉換,類似於Number() 函數。
//對於+號
var str = "10";
str = +str; //值會變成數字10
var str2 = "hello";
str2 = +str2 //值為NaN,因為不能轉為數字
var boo = false;
boo = +false; //值變為0
//對於-號,也差不多,只是變成相反數
var s = "100";
s = -s; //值為-100
2.加性/乘性運算符(加,減,乘,除,取模)
1.加號(+):進行加法運算
2.減號(-):進行減法運算
3.乘號(*):進行乘法運算
4.除號(/):進行除法運算
5.求模(%):求餘數
30+20; //50
30-10; //20
30*20; //600
30/10; //3
25/6 ; //1`
3.布爾操作符
布爾操作符有三個:非,與,或
3.1邏輯非
1.符號:!
2.功能:非操作會返回一個布爾值,功能對布爾值取非,即相反。它會對值轉成布爾值。
console.log(!false); //true
console.log(!0); //0的布爾轉換是false,進行非操作後就是true
console.log(!"hh") //非空字元串布爾是true,進行非操作後就是false
//小技巧,使用兩!!可以類似於Boolean函數,對任何數值進行布爾轉換
console.log(!!"hello"); //true
console.log(!!0); //false
3.2邏輯與
1.符號:&&
2.功能:進行與操作需要兩個值,當兩個值布爾值都為true時才會返回true,否則返回false,並且它是一個短路操作符(當第一個值為false時,就不用再判斷第二個值)
console.log(false&&true); //false
console.log(false&&false); //false
console.log(true&&false); //false
console.log(true&&true); //true
3.註意點: &&(與)操作不一定回返回布爾值一下是特殊情況:
- 如果第一個操作數是一個對象的時候,返回第二個操作數
- 如果第一個操作數是null,返回null
- 如果第一個操作數是NaN,返回NaN
如果第一個操作數是undefined,返回undefined。
//數組對象 var arr = new Array(); //字元串 var str = 'hello'; console.log(arr&&str) //'hello' console.log(null&&str) // null console.log(NaN&&str) //NaN console.log(undefined&&str) //undefined
3.3邏輯或
1.符號:||
2.功能:進行與操作需要兩個值,當存在有一個值的布爾值為true則返回true,否則false,或操作也是短路操作符,放當第一個操作值為true時,直接返回true,不用檢查第二個操作值。
3.註意點:如果有一個操作數不是布爾值, ||(或)操作不一定回返回布爾值一下是特殊情況:
- 如果第一個是對象,則返回第一個操作數
- 如果第一個數是false,則返回第二個數
- 如果兩個數都是對象,返回第一個操作數
- 如果兩個操作數是NaN,返回NaN
- 如果兩操作數是undefined, 返回undefined。
var arr = new Array();
console.log(arr||"str"); //返回arr空數組[]
console.log(NaN||NaN) ; //NaN
console.log(false || "str") //"str"
4 關係操作符
1.關係操作符有,大於(>),小於(<),小於等於(<=),大於等於(>=)
2.註意點:
//1.對於數值轉換,直接進行比較,返回true或false
34>23; //true
//2.對於兩個字元串比較,是通過從前往後逐個比較其字元編碼值(ascll碼)大小
"Biasd"<"adsf"; //true, 因為B字元編碼為66小於a字元編碼97
//3.對於字元串和數字比較,會將字元串轉為數字
"23"<3; //false , "23"會轉成23,然後和3比較
"a"<3 //false , "a"轉為NaN,NaN和任何操作數比較都為false
5.相等操作符
相等操作符有相等(==)和不相等(!=),全等(===)和不全等(!==)
相等和不相等是先轉換後比較,而全等和不全等是僅比較不轉換
5.1相等和不相等轉換重點:
//1.如果有一個操作值為布爾值,則將該布爾值轉為數值,true轉為1,false轉為0
true == 1 ; //true
//2.null 和 undefined相等
null == undefined ; //true
//3.有一個操作數為NaN時,一定返回false
NaN == 1; //false
//4.兩個NaN比較也返回false
NaN == NaN ; //false
//5.兩個值是對象時,若不是指向同一對象就返回false
5.2全等和不全等重點:
可以看出全等是3個等號,所以比較嚴格,不會像相等一樣進行轉換。通俗的說:你不是就不是。
//相等和全等的比較
"55" == 55 ; //true,相等情況下,"55"可以轉換
"55" === 55 ; //false,全等情況,"55"不轉換為數字,所以數據類型不同,直接返回false
//關於null 和 undefined,上面相等比較時時兩個值相等,但全等比較就不等
null === undefined ; //false
6.條件操作符(三元操作符)
1.模板:表達式1?表達式2:表達式3。
2.使用說明:當表達式1為true時,返回冒號前的表達式2的結果,false就返回冒號後表達式3
//例子:
var num = 3>2?1:0; //num的值為1
7.賦值操作符
1.簡單的賦值操作由(=)號表示
var val = 10; //對val賦值為10
2.複合賦值操作
var num = 10;
num = num+10;
//上面那句可以用下麵一句替代
num += 10;
8.逗號操作符
1.使用逗號操作符可以在一條語句執行多條操作;
2.使用逗號操作符進行賦值,賦值時總會返回表達式最後一項
//同時對三個變數聲明並賦值
var num=1, num2 = 2 , num3 = 3;
//賦值時總會返回表達式最後一項
var n = (32,12,5,1,2); //最後n被賦值為2
最後幾句
這次的博客篇幅比較多介紹數據類型和操作符,可以多看幾次,也可以專看註意點,重點等,已經特別標出。看完這裡基本概念已經完了。接下來還會繼續更新筆記,敬請關註。寫一篇博客不容易,花費很多心思,如果覺得寫得好,關註一下,給個贊吧,讓我有動力繼續寫博,哈哈。
本文出自博客園:http://www.cnblogs.com/Ry-yuan/
作者:Ry
歡迎轉載,轉載請標明出處