JS语法

80 阅读2分钟

版本

现在版本最好还是按照ES6版本来写比较好

历史版本

  • ES3,IE6支持,总体评价:垃圾
  • ES5,总体评价:还是垃圾
  • ES6,大部分浏览器支持,总体评价:一半垃圾一半好
  • ES2019于ES6差别不大

为什么说ES6 一半垃圾

  • 因为ES不能删除以前的特性,要兼容旧网站
  • 也就是说以前能运行的网站,以后都要能运行
  • 对比python3你就能知道兼容的好处:稳定

一门语言的价值

  • 是由其产生的价值决定
  • JS是世界上使用最广的语言
  • JS是门槛最低的语言(只要你不学槽粕)
  • JS是一门能产生价值的语言(虽然不美)

JS之父对JS的评价

早期的评价:
它的优秀之处并非原创,它的原创之处并不优秀

表达式、语句、标识符

表达式

1 + 2 表达式的值为3
add(1,2)表达式的值为函数的返回值
console.log 表达式的值为函数本身
console.log(3)表达式的值为多少?undefined

语句

var a =1是一个语句 语句:一般会改变环境(如声明,赋值)

标识符规则

标识符可以由大写字母、小写字母、下划线(_)和数字0~9组成,但必须是以大写字母、小写字母或下划线 _ 开头;一般用小驼峰命名规则,第一个字母开头小写,后面字母开头大写,这是程序员们自己规定的,不是计算机强制要求的

变量名是标识符

表达式与语句区别

  • 表达式一般都有值,语句可能有也可能没有
  • 语句一般会改变环境(声明,赋值)
  • 上面两句话并不是绝对的

空格

大部分空格没有实际意义
var a = 1 和 var a=1没有区别
加回车大部分时候也不影响
只有一个地方不能加回车,那就是return后面

判断语句

let a = 1
if(a === 2)
	console.log('a') // 只会管着一句
	console.log('aaaa')
        // 如何是这样写是语句还没有结束
	console.log('a'),console.log('aaaa')
        // ; 是表示这条语句结束
	console.log('a');console.log('aaaa')
  1. if
  2. switch
  3. 三元判断
  4. && 短路逻辑
  5. || 短路逻辑

if

if(表达式){} {}在只有一个语句时可以省略,注意是一个语句而不是一行!

const a = 1;
if (a === 2)
    console.log('打印a'); console.log('打印b')

这里只会打印b

循环语句

  1. while
  2. do...while
  3. for

while

可以看我下面的面试题有说

for

for (var i = 0; i < 5; i++) {
    console.log(i)
}
请问这里打印出的i是多少?
console.log(i)

答案是5, 因为当i == 4, i = i + 1 = 5, 然后退出循环

for (let i = 0; i < 5; i++) {
    console.log(i)
}
请问这里打印出的i是多少?
console.log(i)

i是undefined. 因为Let声明的变量不会变量提升

break continue

break:退出循环

continue:跳过本次循环,下次继续

for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 5; j++) {
        if (i===5) {
            break;
        }
    }
    console.log(i)
}

会打印出0,1,2,3,4,5,6,7,8,9

因为break只会跳出和他最近的一个for循环

label

{
    a:1;
}

以上的代码是:有一个代码块,代码块里有一个label, a: 1 表示这个标签是a, a的值是1
以上代码不是一个对象!

foo: {
    console.log(1)
    break foo;
    console.log('本行不会输出')
}
console.log(2)

foo 表示 label的标识符是 foo, break foo 表示退出当前的Label, 所以代码会输出1, 2

面试题

是否会进入死循环

a = 0.1
while(a !== 1){
	console.log(a)
	a = a + 0.1
}

会,因为浮点数导致

for 循环打印出来是什么

for(var i = 0; i<5; i++){
	setTimeout(()=>{
		console.log(i)
	},0)
}

打印 5次 5

label 面试

{ foo: 1 } 打印出来是 1,不是对象
如果是 var a = { foo: 1 },因为a是label,语句就是一个1