[Day02] 变数

变数

变数是用来储存资料和进行基本运算的基本单位;在宣告时给资料一个名称,名称像一个盒子把资料装起来,需要用到的时候找盒子就可以拿到资料。

var a = 10;
var b = 20;
var c = 30;

JavaScript 是一个弱型别的语言,变数在宣告时不用指定型别,型别的资讯只在物件本身,变数只用来作为取得值或物件的参考

var d; // 因宣告 d 没给数值,所以 d 的内容为 undefined

可以在浏览器的 Devtools(工程模式)用 console.log(变数名)印出我们宣告过的变数 a、b、c、d 再加一个为宣告的 e,会得到如下图

可以看到 a、b、c 皆出现该有的值,未赋值的 d 显示值为 undefined,e 因为未宣告所以报错。
而对未 var(宣告)的变数也能直接赋值 e = 10 ,但是会有後遗症

e = 10; // 自动变成全域变数

变数命名规则

  • 数字不可用於开头,可以用英文大小写字元、下底线_、钱字号 $
  • 不能用 -.
  • 有区分大小写,大小写不同视为不同变数
  • 名称 identifier(识别符,简称ID),它在程序码上下文中具有唯一性。
  • 名称不可以是关键字(在 JS 里有特定用途的字词,例如 if、else、function 这些)
  • 名称不可以是保留字(未有特定用途,但未来可能会变关键字词,若是担心的话可参考 MDN 的说明)

然後有一些是写 code 习惯上的注意事项

  • 变数与函式建议用小驼峰,类别用大驼峰式的命名
var userAddress = '台南某区某路某号'; // 小驼峰第二字以後字首大写
var UserNumber = '0912345678'; // 大驼峰字首皆大写
  • 虽然支援 Unicode (JavaScript 1.3 後),但基於开发习惯,尽量避免使用非英文字母、下底线 _、钱字号 $ 的字元命名变数,以免其他语系的系统打开变成乱码
  • 下底线 _、钱字号 $ 为开头的命名通常是有特殊用途,例:类别中的私有变数、常数或函式(方法)

var、let、const

在 ES6 以前可以透过 var 来宣告变数,而 ES6 以後宣告分成了变数与常数

ES6 以前 ES6 以後
变数 var 变数 var、let常数 const

var 过的值可以一直 var 下去,但 let 不行;

var a = 3;
var a = 4;
var a = 5;
let b = 6;
let b = 7;

// 报错情况
let b = 6;
    ^
SyntaxError: Identifier 'b' has already been declared

var 与 let 最大的差异在於变数作用范围(scope)的不同.

MDN
let 可以宣告只能在目前区块、阶段或表达式中作用的变数。而
var 则是定义了一个全域变数,或是在整个 function 而不管该区块范围。

看的似懂非懂,没关系我们来写写看

let b = '全域 let b';
var b1 = '全域 var b1';
if(true){// Start of Block scope
  let b = '区块 let b';
  var b1 = '区块 var b1';
  console.log(b);
  console.log(b1);
}// End of Block scope
console.log(b);
console.log(b1);

// 四个 console.log 执行结果
区块 let b // 区块内宣告的 let b
区块 var b1 // 区块内宣告的 var b1(全域的 var b1 被覆盖)
全域 let b // 全域宣告的 let b
区块 var b1 // 区块内宣告的 var b1(全域的 var b1 被覆盖)

结论:除了区域跟执行顺序也有关系。

常数 const

  • 宣告 const 常数,会对它的值建立一个唯读的参考。
    并不是说这个值不可变更,而是这个变数不能再一次指定值。例如,假设常数的内容(值)是个物件,那麽此物件的内容(物件的参数)是可以更改的。

下一篇:型别


<<:  Day02 捷径只能自己写吗?

>>:  Swift 新手-打造第一个 iOS App

17.unity显示/隐藏物件(SetActive)

想要制作一个假背包,利用按钮显示背包,再按下按钮关闭背包。 要使用GameObject.SetAct...

【没钱买ps,PyQt自己写】Day 4 - 重要的 Qt 程序逻辑观念,务必先有此观念後面才会懂自己在干嘛

看完这篇文章你会得到的成果图 (没有,今天不写程序,但要讲重要观念XD) PyQt 的程序逻辑 我特...

说话的艺术

虽然在Day 9 聊了一些团队中的提问文化,我大原则仍希望我的团队内大家是开放的风气,什麽都可以问,...

能够滑起来的UICollectionView Day9

今天恢复了点元气,终於能好好做事了。 萤幕录制 2021-09-13 下午7.44.19.mov 目...

Day8-流程控制表达

第四章也蛮简单的,Böhm与Jacopini证明所有程序都可使用三种流程控制表达 执行一个子程序,然...