JavaScript學(xué)習(xí)筆記(一)——數(shù)據(jù)類型
雖然JavaScript是一種“弱類型”的腳本語言,但數(shù)據(jù)本身仍屬于某種數(shù)據(jù)類型瞬痘,本文對JavaScript中的數(shù)據(jù)類型作了簡要介紹酥馍。
0x01 JavaScript中的數(shù)據(jù)類型
-
ES6[1]之前的數(shù)據(jù)類型有6種
- Undefinrd
- Number
- String
- Boolean
- Null
- Object
-
ES6之后添加了1種
- Symbol
0x02 JavaScript中的typeof運(yùn)算符
typeof
可以在程序運(yùn)行過程中動(dòng)態(tài)獲取數(shù)據(jù)的數(shù)據(jù)類型辩昆。
-
typeof
語法格式:typeof 變量名
-
typeof
運(yùn)算符的運(yùn)算結(jié)果是以下6個(gè)字符串之一(字母全小寫)“undefined”, "number", "object", "string", "fuction", "boolean"
示例:
function sum(a, b) {
if (typeof a == "number" && typeof b == "number") {
return a + b;
}
}
調(diào)用函數(shù):
alert(sum(1, 2));
此時(shí)瀏覽器會(huì)彈窗,結(jié)果為3
注意下面代碼的執(zhí)行結(jié)果:
var i; alert(typeof i);//結(jié)果為undefined var j = 10; alert(typeof i);//結(jié)果為number var s = "abc"; alert(typeof s);//結(jié)果為string var k = false; alert(typeof i);//結(jié)果為boolean var n = null; alert(typeof n);//結(jié)果為object!!!!!! var obj = new Object(); alert(typeof obj);//結(jié)果為object //對于上述定義的函數(shù)sum alert(typeof sum);//結(jié)果為function
0x03 Undefined類型
Undefined類型只有一個(gè)值:undefined
當(dāng)一個(gè)變量沒有賦值時(shí)旨袒,系統(tǒng)默認(rèn)是undefined
var i;
var j = undefined;
var k = "undefined";
alert(i == j);//true
alert(i == k);//false
0x04 Number類型
Number類型包含的值:負(fù)數(shù)汁针、整數(shù)术辐、不是數(shù)字(Not a Number)、無窮大
例:-1,0,1,2.2施无,NaN Infinity
var i = -1;
var j = 0;
var k = 1;
var m = 2.2;
var n = NaN;
var q = Infinity;
alert(typeof i);//number
alert(typeof j);//number
alert(typeof k);//number
alert(typeof m);//number
alert(typeof n);//number
alert(typeof q);//number
什么時(shí)候運(yùn)算結(jié)果是NaN?
運(yùn)算結(jié)果本來應(yīng)該是一個(gè)數(shù)字辉词,但運(yùn)算結(jié)束后結(jié)果不是一個(gè)數(shù)字時(shí)結(jié)果為NaN.
例如:
var a = 10;
var b = "hello";
alert(a / b);//NaN
但是下面的代碼結(jié)果不是NaN!
alert(a + b);
結(jié)果為
10hello
,這里的+
作字符串拼接猾骡,而不作加法運(yùn)算瑞躺。
當(dāng)除數(shù)為0是,運(yùn)算結(jié)果為Infinity.
var a = 10;
var b = 0;
alert(a / b);//Infinity
isNaN(a)
函數(shù):
- a不是數(shù)字時(shí)運(yùn)算結(jié)果為
true
兴想; - a是數(shù)字時(shí)結(jié)果為
false
示例:
function sum(a, b) {
if (isNaN(a) || isNaN(b)) {
alert("參與運(yùn)算的必須是數(shù)字幢哨!");
}
return a + b;
}
//調(diào)用
sum(10, "12");//參與運(yùn)算的必須是數(shù)字!
sum(10, 12);//22
0x05 Boolean類型
JavaScript中的Boolean類型只有兩個(gè)值:
true
和false
Boolean()
函數(shù):將非Boolean類型的數(shù)據(jù)轉(zhuǎn)換為Boolean類型(一般程序會(huì)自動(dòng)調(diào)用嫂便,無需手寫)捞镰。
例如:
var username = "";
if (username) { //此處會(huì)自動(dòng)調(diào)用Boolean()函數(shù),轉(zhuǎn)換結(jié)果為false
alert("Hello " + username)
} else {
alert("用戶名不能為空毙替!");//此句代碼被執(zhí)行
}
常用的Boolean()
函數(shù)結(jié)果:
alert(Boolean(1));//true
alert(Boolean(0));//false
alert(Boolean(""));//false
alert(Boolean("abc"));//true
alert(Boolean(NaN));//false
alert(Boolean(null));//false
alert(Boolean(undefined));//false
alert(Boolean(Infinity));//true
0x06 Null類型
Null類型只有一個(gè)值:null
但是岸售,
typeof null
運(yùn)行的結(jié)果是Object
0x07 String類型
在JavaScript中,創(chuàng)建字符串的方式:
- 第一種:
var s = "abc";
- 第二種:
var s = new String("abc";)
注意:String是一個(gè)內(nèi)置的類厂画,其父類是Object凸丸。
示例:
//小string(屬于原始類型String)
var s1 = "abc";
alert(typeof s1);//string
//大String(屬于Object)
var s2 = new String("abc");
alert(typeof s2);//object
小string和大String的屬性和函數(shù)通用。
- 常用的String類型的常用屬性和函數(shù):
- length:返回字符串的長度
- charAt():返回指定位置(下標(biāo))的字符
- indexOf():返回給定的字符串在此字符串中第一次出現(xiàn)處的索引
- lastIndexOf():返回給定的字符串在此字符串中最后一次出現(xiàn)處的索引
- replace():替換
- split():拆分字符串
- toLowerCase():將字符串字母全部轉(zhuǎn)換為小寫
- toUpperCase():將字符串字母全部轉(zhuǎn)換為大寫
- substr():截取指定長度的子字符串
- substring():截取指定位置(左開右閉)的子字符串
示例:
var s = "http://www.baidu.com";
alert(s.indexOf("http"));//0
alert(s.indexOf("https"));//-1
alert(s.charAt(3));//p
alert(s.replace("http", "https"));//https://www.baidu.com,只替換一次
alert(s.substr(2, 4));//tp:/ 表示從2開始取4個(gè)字符
alert(s.substring(2, 4));//tp 表示取位置為[2,4)的字符袱院,不包含4
0x08 Object類型
Object類型是所有類型的超類屎慢,自定義的任何類型,默認(rèn)繼承Object.
Object類型常用的屬性:
prototype(最常用):給類動(dòng)態(tài)的擴(kuò)展屬性和函數(shù)坑填。
constructor
Object類包含的函數(shù)
toString()
valueOf()
toLocalString()
在JavaScript中定義類的方法(和定義函數(shù)相同):
-
第一種方法:
function 類名(形參) { }
-
第二種方法:
類名 = function(形參) { }
判斷一段代碼是類還是函數(shù)具體要看怎么使用抛人。
例如:
function sayHello() {
}
//把sayHello當(dāng)做函數(shù)
sayHello();
//把sayHello當(dāng)做類
var obj = new sayHello();
在JavaScript中定義類的同時(shí)又是一個(gè)構(gòu)造函數(shù)的定義
function Student(name, age) {
this.name = name;
this.age = age;
}
代表Student
類中有兩個(gè)屬性name
和age
。
//創(chuàng)建對象
var stu = new Student("Eric", 25);
//訪問屬性
alert(stu.age);//25
alert(stu.name);//Eric
//訪問屬性的另一種語法
alert(stu["age"]);//25
alert(stu["name"]);//Eric
在類中定義函數(shù):
Product = function(pno, pname, price) {
//屬性
this.pno = pno;
this.pname = pname;
this.price = price;
//方法
this.getPrice = function() {
return this.price;
}
}
var pro = new Product(1, "Apple", 6.0);
var pri = pro.getPrice();
alert(pri);//6.0
此外還可以通過prototype
屬性給類動(dòng)態(tài)擴(kuò)展屬性和方法:
//動(dòng)態(tài)擴(kuò)展一個(gè)getName()函數(shù)
Product.prototype.getName = function() {
return this.pname;
}
//調(diào)用動(dòng)態(tài)擴(kuò)展的函數(shù)
var pna = pro.getName();
alert(pna);//Apple
0x09 區(qū)分null脐瑰、NaN和undefined
-
數(shù)據(jù)類型不一致
alert(typeof null);//object alert(typeof NaN);//number alert(typeof undefined);//undefined
-
null和undefined可以等同
alert(null == undefined);//true alert(null == NaN);//false alert(NaN == undefined);//false
0x0A 區(qū)分==
和===
==
:等同運(yùn)算符 => 只判斷值是否相等妖枚。
===
:全等運(yùn)算符 => 既判斷值是否相等,又判斷數(shù)據(jù)類型是否相同苍在。
alert(null === undefined);//false
alert(null === NaN);//false
alert(NaN === undefined);//false
alert(1 == true);//true
alert(1 === true);//false
by xiaoxin_zh
2022.4.18
-
ECMAScript6(簡稱ES6)是于2015年6月正式發(fā)布的JavaScript語言的標(biāo)準(zhǔn)绝页,正式名為ECMAScript 2015(ES2015)。它的目標(biāo)是使得JavaScript語言可以用來編寫復(fù)雜的大型應(yīng)用程序寂恬,成為企業(yè)級開發(fā)語言续誉。 ?