[Day05] JavaScript - 资料型别

资料型别

 
JavaScript 的型别主要可以分成基本型别 (Primitives)与物件型别 (Object) 两大类;所有基本型别以外的值都是物件型别。

基本型别(primitives)

  • Number (数字)
  • String (字串)
  • Boolean (布林值)
  • Null (空)
  • Undefined (未定义)
  • Symbo (ES6新增)

物件型别(object)

  • Object (物件)
    • Function(函式)
    • Array (阵列)
    • Date (日期)

JavaScript是一个弱型别(Weak type)、且为动态(Dynamically Type)的程序语言。即不需在变数/常数在定义时宣告型别,只需要指定它的值,JavaScript会依照所指定的值决定变数/常数的资料类型。

如下范例:
JavaScript 允许将数值与字串相加,结果变成一个字串;变数本身无需宣告型别。

	var x = "JavaScript";
	var y = 123;
	var z = x + y;
	console.log(z);   //JavaScript123

补充
有人将常见的程序语言画了一张分类图:
(这里先不详细解释,之後再回头补充)
https://ithelp.ithome.com.tw/upload/images/20210910/20141293NptSvQf06Q.jpg


数字 Number

var x = 5;      

字串 String

var str1 = "Hello how are you?"

物件 Object

var student = {
	firstName: "Peter",
	lastName: "Huang",
	id: 12345 
}
  • 阵列 Array**
    Array的资料型别是Object,是Object的子类型。
    所以若透过typeof来查型别,会发现结果是object,而不是array

若要检查是不是阵列Array的话,可以透过Array.isArray(arr)来确认,如下:


const Array_1 = []
const Array_2 = [1, 2, 3]

console.log(Array_1.length) //0

Array_1[0] = 6
Array_1[1] = 7
Array_1[2] = 8
Array_1[2] = 9

console.log(typeof Array_1) // object
console.log(Array.isArray(Array_1)); //true  ----> Array_1为阵列

console.log(Array_1) // [6,7,9]
console.log(Array_1.length) //3
console.log(Array_1[3]) //undefined


symbol

Symbol 是 javascript ES6 新增的资料型别,用来表示独一无二的值,所以如果我们像这样定义 symbol:

let sy_1 = Symbol();
let sy_2 = Symbol();
sy_1==sy_2; //false
sy_1===sy_2; //false

Symbol 函数也可以接受一个字串参数,主要是用来区分不同的 symbol,可以用 description 取得 Symbol 的描述内容。

let sy_1 = Symbol("Peter");
let sy_2 = Symbol("Allen");
sy_1.description;   //Peter

由於每个 Symbol 值都是不相等的,所以用 Symbol 来当作物件的属性名称,这样可以避免不小心因为有相同的属性名称把内容盖掉的情况发生。

比如说像我们要建立一个使用者的列表,但其中可能会有同名的人:

onst users={
    "Peter": {
    "height": 180,
    "weight": 80
  },
  "Allen": {
    "height": 173,
    "weight": 68
  },
  "Peter": {
    "height": 171,
    "weight": 72
  }
}

因为里面都有 Peter 这个 key,所以前面的 Peter 就会被覆写掉了。

这时只要改成 symbol 就好了。

const users={
    [Symbol("Peter")]: {
    "height": 180,
    "weight": 80
    },
  [Symbol("Allen")]: {
    "height": 173,
    "weight": 68
  },
  [Symbol("Peter")]: {
    "height": 171,
    "weight": 72
  }
}

参考来源:
https://eyesofkids.gitbooks.io/javascript-start-from-es6/content/part3/datatype.html
https://tools.wingzero.tw/article/sn/263
https://www.gushiciku.cn/pl/p3St/zh-tw


<<:  [Day1] 整体规划以及是否适合

>>:  Day 5-单元测试 3A 原则 (Arrange, Act 和 Assert) (基础-4)

Day 21:专案04 - Facebook爬虫02 | Selenium

昨天结束在Facebook登入之後,今天就接续昨天的内容,以木棉花的粉丝专页为例,来讲怎麽爬下来贴...

信件

Laravel 支援信件寄送功能,可以经由各种服务发送信件,框架也预设有使用者登入时就寄送验证信的功...

自动化 End-End 测试 Nightwatch.js 之踩雷笔记:检查颜色 II

客制化指令 Nightwatch 本身提供的功能虽然已经相当多了,不过或多或少都有些缺失。又或者我们...

Day 20 : 线性回归与罗吉斯回归

线性回归(Linear Regression) 如果我们有数据 (x, y) ,假设 x 是年资、y...

【履历要点 ii】不要放这些在履历上

上一篇讲了要放什麽,今天这篇讲一下不要放的东西。 Summary 这应该是有点争议的,至少我会有点想...