[Day04] 物件型别

物件 Object

除了基本型别其他都可以归类至物件型别

建立一个自定义的物件主要有两种方式,一个是透过 new 关键字来建立一个物件实体,再替此物件新增属性与方法,另一个是物件实字(Object literal)直接用大括号 {}建立物件,并且在建立的同时直接指定属性或方法。

  • 建立函式(new 关键字)
var person = new Object();

person.name = "Rex";
person.age = "25";
person.sayName = function() {
  alert( this.name );
};
  • 物件实字(Object literal)
var person = { // 或直接指定属性跟方法
  name: "Rex",
  age: "25",
  001: "abc-000",
  sayName: function() {
  alert( this.name );
  }
};  

因为相对於建构式来说更为简短,而且在易读性跟效能都优於建构函式,所以普遍会比较建议使用物件实字。
而我觉得在新增属性後面是加,的部分自己较容易搞错,检查时可多加留意。

物件属性存取

可以用透过.[]中括号来进行存取,两者最大的不同是,当物件的索引键命名刚好是不符合 JS 的规则时,[]中括号可以正确存取。

person.name; // 'Rex'
person.001; // 报错 Uncaught SyntaxError: Unexpected number
person["name"]; // 'Rex'
person["001"]; // 'abc-000'

物件属性新增、删除

新增属性跟变数一样直接用=,若想要删除则透过 delete 关键字来删除:

var person = {};
person.name2 = "Tom";

person.name2; // "Tom"

delete person.name2; // true
person.name2; // 被删除变 undefined

判断属性是否存在

属性不存在会回传 undefined,如果想要检查该属性是否存在有三个方式

console.log(person.name); // 缺点是如果不存在或该属性刚好是 undefined,则都会显示 undefined
person.hasOwnProperty("name"); // 只会检查物件本身
console.log("name" in person); // in 运算子会继续顺着原型链上检查

阵列 Array

JS 的阵列可视作一种特别的物件,没有规定一定要放什麽东西,可以是原始资料类型、另一个阵列、物件甚至函数。
要注意的是,阵列是有顺序性的集合,所以只能透过[]加上索引来存取。
跟物件一样可以透过

  • new 关键字来建立
var a = new Array();

a[0] = "Tom";
a[1] = "Mike";
a[2] = "Jerry";

a.length; // 3
  • 阵列实字的方式(实务上较常见的方式)
var b = [];

b[0] = "Tom";
b[1] = "Mike";
b[2] = "Jerry";

b.length; // 3

或者直接输入值,不用再次输入变数跟顺序,各有利弊看情况使用

var c = ["Tom", "Mike", "jerry"];
c.length; // 3

阵列与字串一样可以透过 length 属性取得,而在阵列时 length 又可以被覆写,如果原本 b.length = 3,覆写成 b.length = 1, 後面的值就会被移除,如果覆写成 b.length = 5,没有的值会显示 empty。

b.length = 1, 剩下 Tom,Mike 跟 Jerry 被移除

b.length = 5,没有的值会显示 empty

参考资料:
卡斯柏 - JS 物件名词解释及常见观念问题
0 陷阱!0 误解!8 天重新认识 JavaScript!

下一篇 运算式与运算子


<<:  C#入门之文本处理(上)

>>:  Unity自主学习(五):Unity安装失败如何解决

Day17-"与字串相关的函式-3"

strlen() 字串长度计算 计算长度的方法还有一种是,我们利用宣告变数为0,然後去判断我们字串...

[Day30]检视表、索引实作

在OE的order_items和product_infortation资料表中,依照产品被订购次数由...

[想试试看JavaScript ] 阵列一些操作阵列好用的方法 reduce

reduce() reduce 很常用在计算累加上面。 之前介绍的方法,大多都是将阵列的值一个一个放...

Day23 CSS转场动画Transition

我们能够做完一个网页後,接下来我们可以让这个网页有更多的动态、趣味性,今天要介绍的动画效果trans...

[前端暴龙机,Vue2.x 进化 Vue3 ] Day8. v-model 修饰符 -- 省下自己写 JS 处理的时间

v-model 修饰符 Vue 里面为 v-model 提供了一些可以用的修饰符,主要是可以帮我们限...