【後转前要多久】# Day23 JS - JavaScript 变数、运算

变数

JS目前有三种宣告变数的方法。

在ES5以前都用var,ES6之後推出letconst
新的用法都尽量以 letconst 取代 var
但在旧的专案中还是常看到 var的用法。

const 常数

变数命名通常为大写开头、或全大写加底线。
常数是不可修改的值,在程序执行阶段就不会再变动的数,
通常会给一个写死的值,并且不再变动。

const PI = 3.14159

但有个陷阱,
变数储存的是物件型别(Object type)时是Call By Reference,
const x = [aObj, bObj...] 时,若有地方修改到了aObj物件本身,
那x物件也会连带受影响,造成x变动。
物件型别(Object type)

只有原始型别(Primitive type)如数字、字串、布林,是完全无法被修改的。

原始型别(Primitive type)有以下六种

JavaScript provides six primitive types as undefined, null, boolean, number, string, and symbol ,
and a reference type object.

var 变数

全域变数
可重复宣告
为了解决区域变数覆盖全域变数问题,而推出let

全域变数、可重复宣告,
这两项特性合并在一起,会产生熟悉其他程序语言写法的人始料未及的问题。

  • 为什麽i会到11去呢?
for (var i = 0; i <= 10; i++) {
    console.log(i)
}

console.log(i)

为什麽i会到11去呢?

let 变数

区域变数

根据Google的JavaScript style guide,说明我们应该默认用const,
如果该变数需要重新被赋值才用let,永远不用var。

var同样的程序码,在for回圈外使用到时会出现 ReferenceError
属於正常范围

for (let i = 0; i <= 10; i++) {
    console.log(i)
}

console.log(i)

与var同样的程序码


null vs undefined 两者何异

null故意缺少值,连个零值都没给。为Object物件
undefined东西尚未定义。为Type类型本身

两者都是没东西(或称作false)。

null == undefined // true
null === undefined // false

运算子

比较运算

== 值相等
!= 值不等於
=== 严谨比对相同(型别也要相同)
!== 严谨比对不相同
> 大於
< 小於
>= 大於等於
<= 小於等於

1 == '1' // true
1 === '1' // false
'1' === '1' // true

1 == true // true
1 === true // false

1 != '1' // false
1 !== '1' // true

逻辑运算

&& AND
|| OR
! NOT


if 判断式

if、else

score = 75;

if (score >= 90){
    console.log("A");
}else if(score >= 80){
    console.log("B");
}else if(score >= 70){
    console.log("C");
}else if(score >= 60){
    console.log("D");
}else {
    console.log("F");
}

switch

记得结束时要break
default可以放最上面

score = 90;

switch (score) {
    case 100:
        alert("满分!");
        break
    case 99:
    case 98:
    case 97:
    case 96:
        alert("接近满分!");
        break
    case 95,94,93,92,91,90: // 不建议的写法
        alert("很好!");
        break
    default:
        alert("可以更好");
        break
}

判断范围

score = 65;

switch (true) {
    default:
        console.log("F");
        break
    case  score >= 90:
        console.log("A");
        break
    case  score >= 80:
        console.log("B");
        break
    case  score >= 70:
        console.log("C");
        break
    case  score >= 60:
        console.log("D");
        break
}

阵列

var l = [];

l.push(1);    // push新增到最後一项
console.log(l);

l.push(2,3,4)
console.log(l);

l[0] = 100;    // 修改
console.log(l);

console.log(l.length); // 印出阵列长度

物件

常用来接API、Json格式的档案

一个考试的物件

var exam = {}
console.log(exam) // Object{}

exam = {
    title: "数学测验", // 前面物件不需加双引号
    score: 95,
    student: "Jason",
    nickname: ["Tea", "抹茶"],
}
console.log(exam)

exam.pass = true;
console.log(exam)

console.log("考试名称: " + exam.title)
console.log("学生绰号: " + exam.nickname[1])

<<:  Day 23 Password Attacks - 密码攻击 (hydra, pw-inspector)

>>:  Day 23:履历

为了转生而点技能-javascript,day2(杂记-记忆体的回收机制-Not Defined VS undefined

Not Defined VS undefined undefined: 在创造阶段只有变数在记忆体里...

[Day28] Advanced Watcher

昨天发现 Threshold Alert 的设计无法符合我的选股程序的需求,今天来看看 Advanc...

【把玩Azure DevOps】Day16 Artifacts应用:让外部合作夥伴也可以从Private nuget安装Package

前面几篇文章都在提Azure DevOps Artifacts,也就是如何利用这个服务来达成私有化的...

[早餐吃到饱-6] JR Inn Sapporo #日本北海道

先附上JR Inn Sapporo的Google Maps: 这是住宿附赠的「免费早餐」 早餐大概就...

DAY09随机森林演算法(回归方法)

昨天,我们已建立完随机森林,那今天,我打算使用回归方法去看他得出来结果,所以会跟基尼系数预测类别方法...