1. 程式人生 > 實用技巧 >JavaScript資料型別

JavaScript資料型別

概覽

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可以包含任意型別的資料

  1. 注意:slice()是非常常見的擷取陣列的方式,slice() 可以擷取Array的一部分,返回一個新陣列,類似於String中的substring
  2. push()可以在尾部新增元素,pop()是彈出尾部的元素
//定義一個數組,陣列是[],
    var arr = [1, 2, 3, 4, 5, 6, "1", "2"];

    //push()可以在尾部新增元素,pop()是彈出尾部的元素
    arr.push("a")
    console.log(arr);

彈出結果,發現push("a")將"a"壓入尾部

最後還是用這個

這個時間的愚蠢

  1. unshift()可以在尾部新增元素,shift()是彈出尾部的元素
  2. 排序 sort()
  3. 元素翻轉 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
}