JS目前有三种宣告变数的方法。
在ES5以前都用var
,ES6之後推出let
与const
。
新的用法都尽量以 let
与const
取代 var
,
但在旧的专案中还是常看到 var
的用法。
变数命名通常为大写开头、或全大写加底线。
常数是不可修改的值,在程序执行阶段就不会再变动的数,
通常会给一个写死的值,并且不再变动。
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
, andsymbol
,
and a reference type object.
全域变数
可重复宣告
为了解决区域变数覆盖全域变数问题,而推出let
全域变数、可重复宣告,
这两项特性合并在一起,会产生熟悉其他程序语言写法的人始料未及的问题。
i
会到11去呢?for (var i = 0; i <= 10; i++) {
console.log(i)
}
console.log(i)
区域变数
根据Google的JavaScript style guide,说明我们应该默认用const,
如果该变数需要重新被赋值才用let,永远不用var。
与var
同样的程序码,在for回圈外使用到时会出现 ReferenceError
属於正常范围
for (let i = 0; i <= 10; i++) {
console.log(i)
}
console.log(i)
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
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");
}
记得结束时要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)
Not Defined VS undefined undefined: 在创造阶段只有变数在记忆体里...
昨天发现 Threshold Alert 的设计无法符合我的选股程序的需求,今天来看看 Advanc...
前面几篇文章都在提Azure DevOps Artifacts,也就是如何利用这个服务来达成私有化的...
先附上JR Inn Sapporo的Google Maps: 这是住宿附赠的「免费早餐」 早餐大概就...
昨天,我们已建立完随机森林,那今天,我打算使用回归方法去看他得出来结果,所以会跟基尼系数预测类别方法...