JavaScript中的變數、資料型別以及運算子

William Ma 發表於 2020-10-26

變數的宣告

JavaScript 是弱型別語言,所以可以放任意型別的值

在ES6以前,一直使用 var 宣告變數,ES6 新增 let、const

let a; //變數宣告
let n = 5;   //變數初始化 || 宣告變數並賦值

var的特徵

  1. 支援重複的宣告
  2. 禁止遺漏宣告 必須先宣告後使用

let的特徵

  1. let 不允許在同一作用域中重複宣告 (XXX has already been declared 變數重複命名)
  2. 修改變數中的值,由於 js 是弱型別語言,所以可以放任意型別的值

const的特徵

  1. 宣告常量,常量也屬於變數,只是我們不希望它的值被更改
  2. ES6 以前使用全大寫表示常量
  3. 不允許修改值
  4. 宣告的變數必須初始化

資料型別

JS 中每一個值都必須屬於某一種資料型別

  1. 簡單資料型別(原始資料型別 || 簡單值)
  2. 複雜資料型別(合成資料型別 || 複雜值)

簡單資料型別

ES6 以前: undefined 、 number、 string、boolean、null

undefined

未定義,宣告的變數未賦值、函式沒有返回值,都是undefined 有容器,沒內容

undefined 中的bug:

  1. let a; log a; undefined
  2. 變數未宣告: log a; 報錯 XXX 未定義
  3. typeof XXX :undefined

會返回 undefined 的情況:

  1. 變數宣告未賦值
  2. 函式沒有返回值
  3. 給變數賦值為 undefined
  4. 訪問物件不存在的屬性值
  5. return 無明確值

null

ECMA 認為 undefined 是從 null 衍生而來的。不進行精確比較,則相等 啥都沒有

console.log(undefined == null) ; //true

js 關於 null 的 bug :typeof null //object

boolean

boolean(要檢測的值) || !!要檢測的值 會返回true或者false

哪些情況下會返回 false

  1. “ ” 空字串 “ ” 字串模板 “ ”
  2. 0
  3. false
  4. undefined
  5. null
  6. NaN(not a number 非數)

NaN

  1. NaN 不與任何值相等,包括它自己
  2. NaN 的型別,是 number
  3. NaN 涉及任何計算,值都是NaN

isNaN() 檢測一個值是否是非數

  1. 傳入數字,返回 false
  2. 傳入非數,返回 true

string

單引號、雙引號、字串模板都可以表示字串,但不能相互巢狀

let name = "XXX", age = "18歲";
console.log("我叫" + name + "我今年" + age);
console.log('我叫${name}我今年${age}')

ES6 新增: symbol

複雜資料型別

object

運算子

  1. 賦值運算子
    =、+=、-=、*=、/=
    a += b; // a = a+b

  2. 一元運算子(自增自減運算子)
    ++ –
    n = n + 1 n++
    n = n - 1 n–

    let i = 0 ;
    let j = i++ ;
    console.log(j,i);    //0 1
    
    let i = 0;
    let j = ++i;
    console.log(j,i);     //1 1
    
    let i = 5;
    console.log(i++ + 10);      //15
    console.log(i);     //6
    
  3. 邏輯運算子

    與&& 或|| 非!

  4. 算數運算子

    ‘+’ - * / % 取模

  5. 關係運算子

    “> 、 < 、 == 、 ===、 <=、 >=”
    === 全等 值相等,資料型別相等

  6. 三目運算子

	5 > 3?alert('5大'):alert('3大');   //舉個例子

表示式1?表示式2:表示式3;
表示式1為 true,執行表示式2,表示式1為 false,執行表示式3;

  1. typeof
    檢視變數的資料型別