Day-02 JavaScript资料型别(1)

历史背景

1990年代,是灰色缉毒犬PC防毒,回纹针干扰文书,Internet Explorer 还是一支放大镜,而网景Netscape Navigator 4.x宛如麦哲伦的时代。上网连线费以电话费计算,但凡遇见gif动图就要停止加载,遑论拜见更多动态网页特效。

不旋踵,Active Desktop偕着Windows 98 + IE 4.0 正式揭幕微软浏览器垄断王朝,也稍微过早地(在宽频尚未普及的台湾)引入电脑听电台、电脑看电视的新生活型态。尽管桌面那条塞满「X视」、「OO之音」的吃资源频道列没有真正实用过(也没人想在桌面开网页,欠当机吗?)。但自此开始,电脑网页动态功能越来越多,而各种该动未动、载入异常的影片、动态网页元素的Java们与Script们--诸如一卷纸(VBScript)、另一卷纸(JScript)、一杯咖啡(Java Applet)、另一杯咖啡(CoffeeScript)、阿贵动画(不对)全部成为F(不对)红色F符号(ActionScript)以及常常让「动画文字」、「输入帐号密码」区域一片灰的本文主角JavaScript也越来越常见,除了知道他们神通广大,功能很多,一旦出现就可能当机之外,一但细究,都是一本本的砖块大部头。
https://ithelp.ithome.com.tw/upload/images/20210917/201410416u5HWuvJij.jpg

在这时空背景下,网景Netscape 公司为增进网页载入效率,遂着手开发当时还不叫JavaScript的JavaScript。网页切换淡入淡出、状态栏文字跑动、滑鼠触发闪烁效果......不知凡几的炫目效果,令JavaScript一度流行,但随之而来的安全漏洞、装饰过剩(险得俗气)令它一度逐渐退潮。直至2005年AJAX技术兴起,加上数十年中历经数次基於欧洲电脑制造商协会(ECMA)标准规格(ECMAScript)的改版与规范,JavaScript终於成为各浏览器的普遍内建语言,得到广泛使用,更是入门新手最有用的程序语言(之一)。

资料型别:变数

基本规范

与一般程序语言相同,JavaScript也拥有几类资料型别,构成其运作、运算、逻辑判断的基础。其中「变数」就是存放资料与进行运算的基本单位(资料的容器)。

变数名称须遵守若干规则:

  1. 开头须为英文字母、底线或$符号(取「数字」命名的错误很常见,对,就是我)
  2. 惯用小驼峰或大驼峰命名,如 camelCase、CamelCase。
  3. 不可用 - 符号命名。
  4. 开头不能用数字。
  5. 名称不得为系统保留字或关键字,如:this、super、short。
  6. 可以使用中文命名,但在其他语言系统上可能变乱码,不建议。

使用变数,就必须宣告变数。常见的宣告法有var、let、const三种,其间差别容後再秉。使用效果如:

var a; //宣告变数a,但未指定值,内容为undefined
var b = 1 //宣告变数b,指定值为1,内容为1

本处范例,以let或const宣告也有相同结果。

若未宣告就使用变数,会触发错误(ReferencesError),这可以在Chrome开发者工具的Console下察知。但未被宣告的变数,仍可被指定值。如

d = 5;
console.log(d); //会印出变数d的值「5」

然而,这将使d变为全域变数,可能侵入不该影响的其他段落,在程序码较多的程序中难以排查,易生意外。

变数提昇

这是JavaScript的特产。一般而言,程序撰写及运作依循「由上至下」的顺序,上面(前面)的定义与行为(出现)>影响>下面(後面),反之则不然。犹如:

昨天吃太多>导致>今天坏肚子
明天睡懒觉<不影响>今天开机coding

举例来说,JavaScript中有undefined与not defined两种「错误」讯息。前者是一切变数的预设值,代表「尚未定义」,其本身也是一个值(但还没得到真正赋值,比如5、6、30等数字)。後者代表「没有定义」,若变数没有宣告就印出,就会如此。

换言之,变数要被宣告,能正常使用,才拥有值。又因为「由上至下」的逻辑,倘如没有先(在上面)宣告,接着要(在下面)呼叫该变数,就理应得到not defined(没有定义)错误。

然而,在「变数提昇」的影响下,若在函式下方用var宣告变数,结果不会跑出not define,而是跑出undefined,因为此时可以视作「JavaScript把变数提升到函式上方」了。

值得注意的是,仅有使用全域宣告的var才有此提昇效果。


<<:  Day 17-隔离框架 (isolation Framework) - NSubstitute 基本介绍-2 (核心技术-9)

>>:  Day4 — 逻辑组合电路与序向逻辑电路

Day 30. Hugo 系列文回顾,铁人赛反省与获得

前言 今天是铁人赛文章发文的最後一天 (在此我要谢谢我的爸爸、妈妈、老婆、小狗..),本篇会做个简单...

汇集 OpenShift logs 及 Metrics 到 Splunk 做监控.

之前的文章介绍了如何在 OpenShift 透过 Prometheus,AlertManager 跟...

Day4 Sideproject(作品集) from 0 to 1 -题目决定过程

我们当初是先决定题目才开始想要用什麽技术做的 最开始其实有想了两三个 有关於区块链的 ai的等等一些...

CSS微动画 - 动起来番外篇!谈谈Animation的Step

Q: 今天是教师节呢,怎麽没有放假? A: 认真上课黑!本篇是可能实用,但更可能杀光脑细胞的ste...

架站:部属网站环境

昨天安装完Ubuntu Server後,就要来部属网站啦~ 而在部属网站前,就必须安装一些元件给网站...