JavaScript資料型別
阿新 • • 發佈:2020-11-27
概覽
number型別
注意,js不區分小數,整數和Number
123 //整數123
123.1 //浮點數123.1
1.233e3 //負數
NaN //Not a Number 有時候你需要列印判斷這個是不是一個數字,它會列印NaN,說明這個不是一個數字
字串型別
'abc'
"abc"
布林值型別
true , false
邏輯運算
&& //兩個都為真,結果為真
|| //一個為真,結果為真
! //真的為假,假的為真
比較運算,大部分情況用絕對等於
=
== //等於,型別不一樣,值一樣,判斷為true
=== //絕對等於,型別一樣,結果一樣,判斷為true
注意 NaN===NaN 為 false,只能通過isNaN(NaN)判斷這個數值是不是true
儘量避免使用浮點數運算,存在精度問題
// 浮點數問題,比如 1/3 === 1-2/3 為false
console.log(1/3 === 1-2/3);//false
我們可以通過絕對值運算判斷
console.log(Math.abs(1/3 - (1-2/3)) < 0.00001);//true
null和Undefined
- null 是空
- undefined 是未定義
陣列
注意,定義的陣列型別可以不是相同的
//定義陣列
var arr = [1,2,3,4,5,"hello",null,true];
//取陣列
console.log(arr[0]);
取陣列,如果越界,就會報錯 undefined
物件
注意,物件是大括號,陣列是中括號
//Java中定義物件 Person person = new Person(1,2,3,4);
var person = {
name : "nanxi",
age: 5,
tags : ["js","java","web"]
};
console.log(person);
建議每個程式碼都寫嚴格檢查模式
在第一行寫"use strict";
就進入嚴格檢查模式
"use strict";//嚴格檢查模式,預防JavaScript的隨意性導致產生的一些問題
// i = 0;//這個會被定義為全域性變數,多個js檔案容易出錯,設定為嚴格檢查模式就會認為這種語法錯誤
var i = 0;
字串型別詳解
轉義字元
程式碼 | 輸出 |
\' | 單引號 |
\" | 雙引號 |
\& | 和號 |
\\ | 反斜槓 |
\n | 換行符 |
\r | 回車符 |
\t | 製表符 |
\b | 退格符 |
\f | 換頁符 |
多行字串的編寫可以依靠tab鍵上面的引號
"use strict";
//多行字串的編寫可以依靠tab鍵上面的引號
var string = `hello
world
你好
`;
【重點掌握1】ES6 新特性,支援,模板字串,比如在字串裡寫${name}
,注意是`` 不是“”
//ES6 新特性,支援,模板字串,注意是`` 不是“”
var name = "zhangsan";
var str = `姓名 + ${name}`;
console.log(str);
字串長度
console.log(str.length);
轉換成為大寫,注意,這裡是方法
console.log(str.toUpperCase());
獲取s字元在str字串的位置
console.log(str.indexOf('s'));
結果是 10
【重點掌握2】String字串的不可變性
str2 字串為student
如果更改str2的第二個元素為s,str2字串並沒有發生變化,str2字串還是student
如果更待str2字串為book,str2字串發生變化,str2字串為book
【重點掌握3】substring方法,程式設計的時候經常用到
- substring(start: number, end?: number): string;他是包含前面不包含後面
//substring(start: number, end?: number): string;他是包含前面不包含後面
var str2 = "student";
console.log(str2.substring(1));// tudent 從0開始計數,拿到1到最後的程式碼
console.log(str2.substring(1,3));//tu 從0開始計數,拿到1到3之前的程式碼,包括前面的1,不包括後面的3
陣列型別詳解
Array可以包含任意型別的資料
- 注意:slice()是非常常見的擷取陣列的方式,slice() 可以擷取Array的一部分,返回一個新陣列,類似於String中的substring
- push()可以在尾部新增元素,pop()是彈出尾部的元素
//定義一個數組,陣列是[],
var arr = [1, 2, 3, 4, 5, 6, "1", "2"];
//push()可以在尾部新增元素,pop()是彈出尾部的元素
arr.push("a")
console.log(arr);
彈出結果,發現push("a")將"a"壓入尾部
最後還是用這個
這個時間的愚蠢
- unshift()可以在尾部新增元素,shift()是彈出尾部的元素
- 排序 sort()
- 元素翻轉 resverse() ,也就是前面的翻轉到後面,後面的翻轉到前面
陣列關注如何存資料,如何取資料,其他方法都可以自己實現
物件
可以理解JavaScript的物件是由若干個鍵值對組成,格式為
var 物件名 = {
屬性名: 屬性值,
屬性名: 屬性值,
屬性名: 屬性值
}
var car = {type:"Fiat", model:"500", color:"white"};
JavaScript中的所有的鍵是字串,值是任意物件
在JavaScript中使用new關鍵字,就是定義了一個JavaScript物件
var x = new String(); // Declares x as a String object
var y = new Number(); // Declares y as a Number object
var z = new Boolean(); // Declares z as a Boolean object
不建議在物件中定義String, boolean,number 的資料型別,因為會降低程式的執行效率
注意,帶()呼叫的是函式結果,而帶()呼叫函式物件,例如
不帶()呼叫函式物件演示
<p id="demo"></p>
<script>
function toCelsius(f) {
return (5/9) * (f-32);
}
document.getElementById("demo").innerHTML = toCelsius;
</script>
執行結果是
帶()呼叫函式結果演示
<p id="demo"></p>
<script>
function toCelsius(f) {
return (5/9) * (f-32);
}
document.getElementById("demo").innerHTML = toCelsius(90);
</script>
流程控制
for迴圈中
- 使用使用in列印key的值,
- 使用使用of可以列印value的值,注意,這是ES6的新特性
var arr = ["7","8","9"];
//使用in列印key的值
for (var key in arr){
console.log(key);//0, 1, 2
}
//使用of可以列印value的值,注意,這是ES6的新特性
for(var value of arr){
console.log(value);//7, 8, 9
}
Map和Set(ES6新特性)
"use strict";
//在沒有ES6加入的Map之前,我們寫一個學生的成績,學生的姓名,須要用到兩個變數,如下
var names = ["tom","jack","haha"];
var scores = [100,90,80];
// 但是這樣連表查詢麻煩,而且越長越慢,所以ES6加入Map
var map = new Map([["tom",100],["jack",90],["haha",90]]);
console.log(map);
- set()方法是新增或修改
- delete()方法是刪除
- has()是否包含某個元素
迭代
//迭代陣列
var arr = ["5","6","7","8","9"];
for(var x of arr){
console.log(x);//5, 6, 7, 8, 9
}
//迭代map
var map = new Map([["xiaoming","100"],["wangwei","88"],["lisi","98"]]);
for(var x of map){
console.log(x);//["xiaoming","100"],["wangwei","88"],["lisi","98"]
}
//迭代set
var set = new Set([7,8,9]);
for(var x of set){
console.log(x);//7, 8, 9
}