[Day12] JavaScript 的动态型别

我们可以在变数做宣告时,是否绑定型别来判定程序语言是动态型别或是静态型别,而两者区别如下:

动态型别 vs 静态型别

静态型别

静态型别在编译时期,要明确定义变数的型别,先确认并检查型别,到了执行阶段时,就不能随意更换型别,否则会发生错误,例如:Java、C#...

动态型别

动态型别在编译时期,不需要先定义变数的型别,等到了执行阶段才会确定型别,且在执行阶段型别也可不断转换,例如:JavaScript...

JavaScript - 动态型别

接下来以 JavaScript 来看动态型别的特性:

基础范例

在创造阶段时,变数 nickName 并未先定义型别,要等到执行阶段时,才会确定型别,所以值得本身就具备型别,而我们是把值赋予到变数上,变数得型别是来自於值的

// 1.创造阶段
var nickName;

// 2.执行阶段
nickName = 'Carol';

console.log(typeof nickName); // string
console.log(typeof 'Carol'); // string

型别转换

动态型别的型别是可以做更换的,变数 data 被赋予数字到变数上,是数字型别,後被赋予字串的值,变成字串型别

var data = 1;

console.log(typeof data); // numbar

data = '一个字';

console.log(typeof data); // string

型别转换的陷阱

我们必须先了解在执行程序码的过程中,会做怎样的型别变化,不然会落入型别转换的陷阱,型别转换又分为 2 种 - 显性转换隐性转换

显性转换

当变数的值直接被赋予另一个型别的值,称为显性转换

var data = '一个字';
console.log(typeof data); // string
data = true;
console.log(typeof data); // boolean

隐性转换 (Explicit conversion)

在隐性转换中,是来自 JavaScript 运算过程中的型别变化

范例1

将一个数字型别加上任一个字串,会转换成字串型别

变数 data 原是实体蓝色 1,为数字型别,加上一个字串後,转为实体黑色 1一个字,为字串型别

var data = 1;
console.log(data); // 1
console.log(typeof data); // numbar

data = data + '一个字';
console.log(data); // 1一个字
console.log(typeof data); // string

范例2

乘法会将为字串型别的数字转为数字型别

变数 data 原是实体黑色 1,为字串型别,因使用乘法後,转为实体蓝色 10,为数字型别

var data = '1';
console.log(data); // 1
console.log(typeof data); // string

data = data * 10;
console.log(data); // 10
console.log(typeof data); // number

参考文献 (Implicit conversion)

六角学院 - JavaScript 核心篇


<<:  新新新手阅读 Angular 文件 - Router - pathMatch(1) - Day27

>>:  再谈 Side project

[Day26]ISO 27001 附录 A.14 系统获取、开发及维护

A.14 系统获取、开发及维护 A.14.1 资讯系统之安全要求事项 目标:确保资讯安全系跨越整个生...

连续 30 天 玩玩看 ProtoPie - Day 12

第二种启动相机的方法 昨天勾选 Camera 的 Auto Start 来启动相机。 今天使用第二种...

Day 29 - 用Mixins来共用方法

相信经过了前面二十几天的洗礼,小夥伴们应该都对Vue有了一定的掌握度了吧~ 今天要来提到的是Vue的...

今天不写题,来看Half-Dive 资讯:3

废话不多说,上(别人的)影片 Half-Dive是由Diver-X设计的,是日本的公司,他们预计从今...

Day9 PHP数据类型--基本类型之字串

字串(String) 字串(String)就是一连串的字元 先来看字串简单介绍吧~ <?php...