偶尔程序也会碰到需要辨别变数的状态,有时候是用於防止使用者输入奇怪的文字,有时候是帮助自己确认变数的型别,使程序能顺利执行,而 typeof 在使用方面也非常的简单,只要这样 typeof 变数
。
typeof,就是帮忙判断参数的型别,简单使用的方式在上面有提到,这里再给一个比较完整的范例:
// Numbers
typeof 37 === 'number';
// Strings
typeof "" === 'string';
// Booleans
typeof true === 'boolean';
// Undefined
typeof undefined === 'undefined';
// Objects
typeof {a:1} === 'object';
// Functions
typeof function(){} === 'function';
typeof 主要能辨识的型态有:Number
、String
、Boolean
、object
、function
、undefined
、symbol
、bigint
。在一般的状态下,都会正确的回传型别,唯独 null。
typeof null === 'object';
至於为什麽 null 无法回传正确的型别,这部分我比较无法用自己的话去解释清楚,因此我们引用MDN的句子,比较不容易使人混乱:
自从 JavaScript 一开始出现, JavaScript 的值就总以型别标签跟着一个值的方式表示。物件的型别标签是 0,而 null 这个值是使用 NULL 指标 (在大部份平台上是 0x00) 来表示,因此 null 看起来像是一个以 0 为型别标签的值, 并使得 typeof 传回不甚正确的结果。
另外还有一个有趣的地方,如果我们用 typeof 辨识阵列,会发现它回传的不是阵列,而是 object:
var d = [];
console.log(typeof d); // object
如果要避免这个问题,可以这麽写
var d = [];
console.log(typeof d); // object
console.log(Object.prototype.toString.call(d)); // [object Array]
关於这个部分解释起来大概是这样,JavaScript 定义资料型别分为「基本型别」和「物件型别」两种,「基本型别」包含 boolean、null、字串,除了这几种以外,其余都算是「物件型别」,阵列也是「物件型别」。
另外在查找资料的时候,也看到另一个与 typeof 放在一起的小工具 instanceof。这个要解释起来比较复杂,如果不太懂「原型链」的观念,大概只能稍微猜测它会在何时使用到。
instanceof 可以判断 A 是否为 B 的实例(A 是否在 B 的原型链上),如果是则回传 true,反之则回传 false。
function Person(a) {
this.a = a;
}
var b = new Person('c');
console.log(b instanceof Person); // true
这个简单的范例可以看到,b 指向 person,b 为 person 的实例,因此会回传 true。
instanceof 是通过使用一个物件的原型来判断例项关系。
关於 instanceof 在原型上的观念,我听了同学的建议去找了影片来看,大致上可以理解到他拥有继承的概念。关於原型的解释,其实可以是一篇文章了,所以我在这边就尽量的简单解释,假设今天我们要执行两件事,透过原型的概念,我们可以以一个与这两件事相关的物件当作基础并向外做延伸,这样的作法可以减少重复,降低记忆体空间。
以生活上的例子来说,譬如今天有 A 跟 B 两个人,他们的目的地都是去超市买菜,他们都是走路去超市,此时以原型的概念来说,「走路」可以是一个基础,以这个基础向外做延伸,A 买菜 B买肉两种不同选择则是延伸。
在这边我是粗略的解释了一下原型的概念,但是 instanceof 的部分则要再更深入的去探讨原型中 new 这个方法是如何运作的, 这部分就留着有时间研究的更完整再补上了。(下台一鞠躬
<<: DAY1 机器学习(ML)、深度学习(DL)与NLP
>>: Spring Framework X Kotlin Day 9 Rest Repository
-前集提要- 当将form里面的资料post回server端,且处理这个form的资料的URL,都由...
QVector<Item_Statistics> ItemManager::getAll...
列出所有的关键帧时间 ffprobe.exe -v error -select_streams v:...
这期要介绍抬头显示器(HUD)的一些功能和种类,让我们马上开始。 抬头显示器可用於汽车上。它将讯息投...
上传档案後制作超连结下载档案 - 抓档案名字跟下载的URL code 因为抓档案名字用forEac...