[学习笔记] JavaScript - 强制转换资料型态 Coercion

本篇内容参考连结
PJCHENder - coercion系列

Coercion

Definition

Javascript中的 Coercion是指将资料强迫从一种型态转为另外一种型态的特性. 直接参考下面简单例子

    var result = 1 + '2';    console.log(result);

输出则会得到 '12'(string) 而非 3 (number), 因为 Coercion 的关係, 在做运算时, JS 引擎把原本型态为number的1转换成字串'1', 在相加后才会得到字串'12'.

If Practice

知道此特性后, 在写程式上, 可以借由此特性来转写If的判断式, 首先观察 "Null" "undefined" 和 "", 在转换成布林值时, 结果是如何

    console.log('null will convert to ' + Boolean(null));    console.log('undefined will convert to ' + Boolean(undefined));    console.log('Empty String will convert to ' + Boolean(""));

结果如下
If 执行结果

由此我们就可以利用这样的结果, 然后写出确认变数使否有值的判断式.

    var varNoValue;        if(varNoValue)        console.log("Having Value");    else        console.log("No Value");

但是此种方法要特别注意几个重点,

变数为字串并且为空的时候也会为false变数为数字而为0时也为false当变数给的值为布林时, 不建议用此种方法.

Advance Practice - Default Value

也可以利用Coercion, 写出简洁的预设值. 首先来看假如不设立预设值会发生甚么事

    function doSomething(something)    {        console.log("Hello " + something);    }        doSomething("World"); // Try (a)    doSomething(); // Try (b)

上面的例子JS并不会报错, 先来看 Try (a), 很简单就直接console出"Hello World", 再来看Try (b), 此种写法并不会发生错误, 因为在doSomething()的execution context中something已经被定义并hoisting, 只是尚未给值, 所以Try (b)会console出 "Hello undefined" (undefined 被强制转为字串).

那我们如何利用Coercion来写预设值呢, 参考以下範例

    function doSomething(something)    {        something = something  || "<Entner Your Words>"; // 预设预设        console.log("Hello " + something);    }        doSomething();

而这次就会输出 "Hello <Entner Your Words>".

在开始解释之前假如不了解JS的Precedence和Associativity可以参考此连结

我们输入true || false, true || 'Hello', false || 'Hello' 和 'Hi' || 'Hello'都会分别回传不同的结果。

true || false => truetrue || 'Hello' => truefalse || 'Hello' => 'Hello''Hi' || 'Hello' => 'Hi'

当左边为true的时候, 则会输出true. 当左边为false的时候, 则会判断右边是否为true. 因为右边为非空字串因为Coercion的关係被转为布林并视为true, 同时回传字串.

此种预设值方法也要注意上方if判断式转换为布林值时会被视为false的几个case.


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章