学习资源
-
- 网道有详细介绍JavaScript,可以参考学习.
- 本文偏重一些语法/面试/题
表达式和语句
- 什么是表达式/语句?
-
像 var a =1+2 这就是一条语句 ,声明一个变量a 把1+2运算结果赋值给a.
-
比如上一面的var a = 1+2 这个是一条语句, 其中的 1+2 就是表达式啦,计算机最后会自动计算出一个结果3. 表达式最终都会通过计算机
- 表达式的类型:
- 原始表达式: 1+1、
- 访问属性表达式: wang.name、
- 调用表达式 : getSomeData()、
- 创建表达式 : new Date()
var a = 1 + 3;1+3 就是表达式 那么它的值就是 4add(1,2)表达式的值是函数的返回值;console.log(3)返回值是什么?- 是undefined 因为默认就是undefined.
- 3只是这个函数打应出来的而不是返回值
- 二者的区别?
- 语句和表达式的区别在于,前者主要为了进行某种操作,一般情况下不需要返回值;后者则是为了得到返回值。
- 语句可能有值,也可能没有值,语句一般会改变换环境(声明,赋值)等
- 表达式一般都有值.
- 但是都不是绝对的.
空格/回车
- 大部分空格是没有意义的
- 回车大部分也是没有影响的
- 但是在return会面不能加回车 看事例:
//这两个函数调用的值是什么?
function fn(){
return 3
}
fn();
function fn1(){
return
3
}
fn1();
- 答案是: 3 ,undefined
- 看似俩个函数是一样的,其实在第二个函数fn1中,return后面接的是一个回车,大家都知道,JavaScript是一行一行执行代码的,所以此时这个函数会执行俩条语句,一个是return,一个是3。这时JavaScript就会默认在return后面加上 undefined .
标识符
- 标识符(identifier)指的是用来识别各种值的合法名称。
- 标识符有一套命名规则,不符合规则的就是非法标识符。JavaScript 引擎遇到非法标识符,就会报错。
- 标识符命名规则如下。
- 第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。
- 第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9。
- 不合法的标识符
-
1a // 第一个字符不能是数字 23 // 同上 *** // 标识符不能包含星号 a+b // 标识符不能包含加号 -d // 标识符不能包含减号或连词线
-
-
JavaScript 有一些保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。
注释
源码中被 JavaScript 引擎忽略的部分就叫做注释,它的作用是对代码进行解释。JavaScript 提供两种注释的写法:一种是单行注释,用//起头;另一种是多行注释,放在/和/之间。
- 避免不好的注释
- 把代码翻译成中文(每行都翻译)
- 过时的的注释不及时删除
- 发泄不满的注释,职业素养的问题.
- 好的注释
- 比较有坑的地方.
- 代码跟正常的业务逻辑不同,后者bug的地方
- 不要过渡使用注释,这样会分不清主次.
区块
JavaScript 使用大括号,将多个相关的语句组合在一起,称为“区块”(block)。
{
var a = 1;
}
一般是配合 if/for/while 配合用
条件语句
JavaScript 提供if结构和switch结构,完成条件判断,即只有满足预设的条件,才会执行相应的语句。
if 语句
- 语法
- if(表达式){语句1}else{语句2}
if (m === 3) { m += 1; }- {}在语句只有一句的时候可以省略,不推荐
- 一些比较坑的情况
- 表达式里面的非常态. 如 a= 1
- 下面图为什么是"a等于2"?
- 其实
a = 1
if(){
console.log('a')
}
console.log('a等于2')
- 花括号是不写的{},不写不代表不存在.还有就 前面说的空格是没有意义的
- ","逗号是这句好没结束, 分号";" 才是结束
switch 语句
- 语法
switch (fruit) {
case "banana":
// ...
break;
case "apple":
// ...
break;
default:
// ...
}
- 注意 break 大部分记得要写,少部分业务可以利用 break
三元表达式
- (条件) ? 表达式1 : 表达式2
JavaScript var even = (n % 2 === 0) ? true : false;
逻辑运算符 && ||
A && B && C && D 取第一个假值或D A || B || C || D 取第一个真值或D
循环语句
循环语句用于重复执行某个操作,它有多种形式。
while 循环
While语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。
var i = 0;
while (i < 100) {
console.log('i 当前为:' + i);
i = i + 1;
}
- 一些坑
- 下面代码:是不是死循环?
var a = 0.1
while(a !== 1){
a = a + 0.1
}
- 解释:因为是 a 是浮点类型.由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。
for循环
for语句是循环命令的另一种形式,可以指定循环的起点、终点和终止条件。它的格式如下。
for (初始化表达式; 条件; 递增表达式)
语句
// 或者
for (初始化表达式; 条件; 递增表达式) {
语句
}
for语句后面的括号里面,有三个表达式。
- 初始化表达式(initialize):确定循环变量的初始值,只在循环开始时执行一次。
- 条件表达式(test):每轮循环开始时,都要执行这个条件表达式,只有值为真,才继续进行循环。
- 递增表达式(increment):每轮循环的最后一个操作,通常用来递增循环变量。
var x = 3;
for (var i = 0; i < x; i++) {
console.log(i);
}
- 踩坑
- 还有接着来, 下面的代码 i 的值是多少?
// i 的值是多少?
for(var 1 = 0;i<5;i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 解释:for 结束的值是五 那么跟setTimeout 等一会运行打印有什么分别,主要是时间的问题,for循环先执行完, 这时候 i 已经是 "5" 了,所以后面执行的setTimeout "i" 的值肯定是 5
- 用let 不会出现上述情况
- 关于函数调用的题
- 请问我打印a的值是多少?
var a = 1
function fn(){
console.log(a)
}
- 答案: 不确定, 因为我不知道什么时候执行fn()
- 解释: 就像答案所说, 只要调用fn,才会执行此函数, 如果我在此代码下面 把a的值换了, 再调用a呢,这样值就会改变, 因此我们不确定调用fn之前,a的值是多少。
break 和 continue
- break 退出所有循环
- continue 退出当前一次循环
label的题
请问下面俩段代码表示是什么?
{
foo : 1
}
var a = {
foo : 1
}
答案: 第一段表示是 label 值为1,第二段是对象。