數據類型
基本類型
- string
- number
- boolean
- undefined
number類型,包含整數浮點數
NaN和自己都不相等,涉及NaN的計算結果都是NaN
isNaN()
函數用于判斷一個數是不是NaN
引用類型
object類型
function類型 繼承自object
object類型定義了prototype屬性
可以通過它動態給對象綁定方法和屬性
內置對象
String
封裝了很多方法,如 split() replace(),indexof(),includes()
Array
JS中的數組,在數組中可以保持任何類型的數據,并且數組的長度會自動的增加
創建數組對象:
- 方式1:用這種方式創建數組的時候我們并沒有指明數組元素的類型和數組對象的長度
var arr = new Array();
方式2:用這種方式創建數組的時候我們指明了數組對象的長度
var arr = new Array(5);
方式3:用這種方式創建數組的時候我們指明了數組對象的長度
var arr = new Array("Hello", "World", 23, 5.6);
方式4:
var arr = ["Hello", "World", 23, 6.3, true, false, new Date()];
Date
常用方法
> var d=new Date();
undefined
> d
2019-01-26T11:13:49.912Z
> d.getTime();
1548501229912
> d.toString();
'Sat Jan 26 2019 19:13:49 GMT+0800 (GMT+08:00)'
> d.toLocaleString();
'2019-1-26 19:13:49'
>
Math
注意:JS中的Math類和Java中的Math類類似.都是用來執行某些算術操作的
都是不能創建對象的.類似于Java中,通過類名.xxx,類名.xxx()調用屬性和方法
var pai = Math.PI;var num = Math.max(10, 30);
Regexp
正則表達式就是專門來處理String數據的.按照特定的規則,用正則元素指定一個有規則的模板
(例如郵箱的規則),然后測試某個String是否符合這個規則.(也就是測試某個String是否符合郵箱的規則)
使用方式:
創建正則對象
調用test()方法
被測試字符串滿足正則規則返回true
// 測試參數string是否是有效的中文字符// JS中字符是采用UniCode編碼的,每個國家的字符都在在UniCode編碼的某個范圍之內function checkChinaese(str) {var re = "[\u4e00-\u9fa5]"; // 中文的編碼范圍var regExp = new RegExp(re); // 創建正則表達式對象if (regExp.test(str)) {return true;} else {return false;}}
創建正則對象的方式:
var reg = new RegExp("^[hH]ello$");
var reg = /^[hH]ello$/
> var reg = /^[hH]ello$/
undefined
> reg.test("hello");
true
> reg.test("Hello");
true
> reg.test("Hello1");
false
> reg.test("Hffellasdfo1");
false
數據類型轉換
typeof()函數檢查數據的類型
js和python一樣會自動將數據轉換成boolean類型用于條件表達式
轉換規則: 0 NaN "" undefined null ->false
底層實現是調用了Boolean()函數
const PI = 3.14;if (PI){console.log("PI is true");
}
非數值類型轉數值類型
- 可以使用Number()函數
- 使用parseInt()函數
- 使用parseFloat()函數
常用parseInt()``parseFloat()
將string轉數值
非string轉string
toString()
(null和undefined不能用這個方法)- String()函數,該函數可以將任何類型數據轉換為String,包括null和undefined
null,undefined,NaN的比較
undefined與null是相等;
NaN與任何值都不相等,與自己也不相等。
變量聲明
var
聲明變量
const
聲明常量,必須賦初始值,且不能修改.
let
聲明局部變量
運算符
==
JS中的== 和java中的== 相同點
- 對于基本類型來說,是比較兩個基本類型的值是否相等
- 對于引用類型來說,是比較兩個引用的地址是否相同
JS中的== 和java中的== 不同點
- 下面這種寫法在java中是錯誤的.但是在JS中是可以的.在js會吧兩個不同類型的變量轉換成相同的類型,然后再去比較
- 轉換的規則如下:當兩個運算數的類型不同時:將他們轉換成相同的類型,
- 1)一個數字與一個字符串,字符串轉換成數字之后,進行比較。
- 2)true轉換為1、false轉換為0,進行比較。
===這是java沒有的.具體的用法:
- 只有兩個變量的類型一致的時候,才會去比較.如果兩個變量的類型不一致則直接返回false
- === 既要比較變量的類型,又要比較變量的值
delete
delete運算符的使用,有三種形式
- 刪除對象中的某個屬性.但是不會影響其他的對象
- 刪除數組中的某個元素,但是不會影響數組的長度和其他的數組元素
- 用在with語句中
void指定要計算一個表達式但是不返回值
href="javascript:void(0)"
不會重新刷新頁面
函數
js沒有函數重載
聲明方式1
function add(x, y){return x +y;
}
//形參 不用var/let/const 也沒有類型,不用有返回值類型,只能返回1個值
聲明方式2
add = function (a, b) {return a +b;
};
流程控制
switch
swich語句的條件是任何類型的變量
var s1 = "hello";
switch(s1){case "hello":console.log("hello world");break;case "world":console.log("world");break;default:console.log("上述條件都不滿足的情況");break;
}
for
常規for循環
for (let i = 0; i < 10; i++) {console.log("老婆,我想你");
}
for in (類似python中的for in 但是jsforin 只能取到Index)
const array = [3, 6, 8, 9, "呵呵", false]for (let index in array) {console.log(array[index]);
}
while/do while/if和java一樣
面向對象
- 聲明類
- 創建對象
- 調用對象的屬性和方法
function Boy(name, age) {this.name = name;this.age = age;this.sayHello = function (name) {return "Hello " + name + " !";}this.toString = function () {return "[name:" + this.name + ",age:" + this.age + "]";}
}let boy = new Boy("小明", 12);
console.log(boy.toString());
console.log(boy.sayHello("Jack"));
with語句,簡化對象的訪問,不用obj.xx.
let boy = new Boy("小明", 12);with (boy) {console.log(name);sayHello("Rose");console.log(toString());
}
JSON
eval()函數
我們把一段有效的JS代碼放到了一個String中
eval()函數就可以解析并執行String中有效的js代碼
> var s2 = "console.log('hello js!')";
undefined
> eval(s2);
hello js!
undefined
JSON定義語法
JavaScript對象標記,可以簡化自定義對象的使用過程,定義并實例化一個js對象
JSON語法 : var 變量 = {
屬性: 屬性值,
屬性: 屬性值,
屬性: 屬性值 // 注意:最后一個語句后面沒有,
};
屬性值 可以是 任何類型,(當然也可以是數組了)
> var xx = {name:"jack",age:12}
undefined
> xx
{ name: 'jack', age: 12 }
> xx.age;
12
> xx['age']
12
屬性的訪問方式:
- xx.屬性名
- xx["屬性名"]
定義有方法的JSON對象
function sayHi(name) {console.log("你好," + name + "!!");
}var stu = {name: '張小三', age: 12, sayHello: sayHi}stu.sayHello("小明");
定義復雜的JSNO對象,屬性名可以用字符串,也可以不用.
var per = {"name": "張三","addr": { // 地址的屬性是另外一個JSON對象"city": "北京","street": "大興區","zipcode": "100012"},"aihao": ["抽煙", "喝酒", "燙頭"] // 愛好屬性的值是一個數組};
使用JSON來傳輸數據
// 下面這個string就是從服務器端返回的json格式的stringvar str = 'var user ={"name": "張三",age : 23,"address":"北京市大興區"}';// 使用eval函數解析并執行這個從服務器端返回的stringeval(str)// 訪問對象的屬性console.log("user.name=" + user.name + ",age=" + user.age + ",address=" + user.address);