xia的小窩

一起來coding和碼字吧

0%

js-變數與資料型態

變數與常數

我們先用 ES6 的 let 宣告

1
2
3
4
let test = 22;
console.log(test);
test = 55;
console.log(test);

在這邊我們看到了它建立的變數 test ,並指派了一個初始值,接著改動初始值,如果我們沒有派給他值就會出現 undefined

也可以跟其他語言一樣進行多個指派

1
let user, user1 = 1, 2;

那我們該用哪個?

常數的優點在於不會在無意間改動不該改動的值

這邊就有一個問題存在……

1
2
3
let str = "hello";
str = "world";
console.log(str);

如果說……

在一開始的時候,str 初始化使用了不可變的值,然後又被取代掉了…..

這邊的重點在於這兩個是不同的字串,只不過 str 保存的值被改變而已……

將數字當成字串

1
2
3
4
5
const a = 3 + '30';
const b = 5 * '50';

// 330
// 250

強制轉型,當兩方的數值為不同型態時,JavaScript 會直接把兩方都轉為相同的型別。

關於 var 的問題

在 ES6 加入了 let ,但是在這之前都是使用 var 的,所以應該也要了解一下 var 。

當我們使用 let 關告變數時,它不會在被宣告的地方之前出現。如果我們使用了 var ,那它可以在 目前範圍內的任何地方 使用。

1
2
3
4
5
6
7
8
9
10
let x1;
let x2 = undefined;
console.log(x1, x2);
console.log(nope)

// undefined undefined
// C:\Users\a9132\Desktop\js\learn.js:4
// console.log(nope)
// ^
// ReferenceError: nope is not defined

如果使用 let ,在宣告變數前使用也會發生錯誤

1
2
3
4
5
x;
let x = 3
console.log(x)

// ReferenceError: Cannot access 'x' before initialization

但是如果使用 var ……

1
2
3
4
5
x;
var x = 3
console.log(x)

// 3

這裡發生了啥事?從上面看下來應該不合理吧……。

使用 var 宣告變數,是採用一種 懸掛 ( hoisting ) 的機制。JS 會掃描整個範圍,任何使用 var 的都會被懸掛,賦予值 不會,所以 JS 會將上面的範例解讀為…..

1
2
3
4
var x;   // 宣告 ( 但沒有賦值 ) 被懸掛
x; // undefined
x = 3; //
x; // 3

咳咳……這樣應該沒問題了,因為 ES6 在短時間內還無法完全普及,所有的程式都必須轉成 ES5 。

所以在那之前也是要懂 var 的啦……

布林值

這邊只有2種型態

1
2
3
let a = false;
let b = true;
console.log(a, b);

符號

使用 Symbol()

1
2
3
4
const red = Symbol();
const yellow = Symbol("new word");
console.log(red == yellow);
// false

符號就跟物件一樣,需是獨一無二。

null and undefined

一般來說我們使用 null ,unfined留給電腦使用,讓電腦告訴我們哪個東西尚未賦值。

物件

物件是一個容器,而物件會隨著時間改變。

1
const test = {}

物件的內容稱為 特性 ( property ) 或 成員 ( member ),特性是由名稱 ( 鍵 ) 與值組成的

特性的名稱必須使用字串或符號,值可以是任何型態

1
2
3
4
5
6
// const test = {}
test.size = 5
test.color = 'red';
// console.log(test)

// { size: 5, color: 'red' }

不同的物件就用不同的 name 去代。

使用 delete 可以刪除部分區域,比如……

1
2
3
4
5
6
7
8
9
10
const test = {
name : 'test',
group : {
cat : 'animal',
dog : 'Dog',
}
}
delete test.group;
console.log(test);
// { name: 'test' }

日期

使用內建的 Date() 物件

1
2
3
const now = new Date();
console.log(now);
// 2022-01-25T13:51:30.042Z

我們也可以設定固定時間

1
2
3
const now = new Date(2022, 1, 25, 21, 53);
console.log(now.getDate());
// 25

陣列

我們先建立一個最基礎的陣列

1
var myNewarray = [0, 1, 2, 3];

正常來說,我們會將陣列裡的東西稱為 元素( element )

我們可以使用 arrayName.length 取得長度

1
2
3
let myarray = [0, 1, 2, 3, 4, 5, 6];
console.log(myarray.length);
// 7