JavaScript版本
历史版本
- ES3,IE6支持,不给力
- ES5,不给力
- ES6,大部分浏览器支持,一半给力,一半不给力
- ES2019与ES6差距不大
ES6一半给力,一半不给力?
- ES不能删除以前的特性,要兼容旧网站
- 以前能运行的网站,以后也能运行
- 相对比较稳定
JavaScript语法
表达式\语句\标识符
表达式
- 1+2表达式的值为3
- add(1,2)表达式的值为函数的返回值
console.log // log(){[native code]}
表达式的值为函数本身console.log(3) // undefined
console.log(3),它的返回值是undefined,因为console.log函数的返回值是undefined
语句
- var a = 1是一个语句
var $1 = 1;var _____ = 1;//不建议这么写;var 9a = 1;//报错,语法错误
;;;//不会报错,空语句
两者区别
- 表达式一般有值,语句可能有可能没有
- 语句一般会改变环境(声明,赋值)
- 上面两句话并不是绝对的
特别注意
- 大小写敏感
- var a与var A不同
- object与Object不同
- function与Function不同
- 空格
- 大部分空格都没有实际意义
- var a = 1和var a=1无区别
- 加回车大部分时候无影响
- 只有一个地方加回车,那就是return后面,代码举例
function f(){ return
3;
} //预想的是返回3,结果加了回车,返回了undefined;
######标识符
- 第一个字符,可以是Unicode字母或者$或_或中文
- 后面的字符,除了上述所说,可以是数字
- 变量名是标识符
//以下js都是支持的
var _ = 1;
var $ = 1;
var ______ = 6;
var 你好 = 'hi'
注释
- 不好的注释
//1.把代码翻译成中文
var person = {
name:'java'; //name为java
age:18; //年龄为18
sex:'男'; // 性别为男
}
//2.过时的注释
var person = {
age:19; //年龄为18
}
//3.发泄不满的注释
var person = {
eat:'哈哈';//我擦,就是个傻X
}
- 好的注释
- 踩坑代码
- 代码为啥这么写,遇到什么bug
区块block
//1.把代码包在一起
{
let a = 1;
let b = 2;
}
//2.常常与if/for/while合用
条件语句
//1.if语句
if(){}else{}
/*
//变态情况
11.条件表达式里面赋值,如a=1
*/
var a = 2;
if( a = 1){console.log("彩笔");}else{console.log("牛逼");}//彩笔
/*
//变态情况
12.多层嵌套if-else
*/
/*
//变态情况
13.缩进
*/
var a = 1;
if( a === 2) console.log(1)
console.log(2) //2
//14.推荐用法
if(表达式){
语句;
}else if(表达式){
语句;
}else {
语句;
}
//2.switch语句
switch(age){
case 18:
//...
break;
case 19:
//...
break;
default:
//...
}
/*
要注意break不能随意省掉
*/
//3.三目运算符 表达式? 表达式2:表达式3
//4.逻辑&&
A && B && C && D;//取第一个假值或者D,并不会取true/false
//5.逻辑或
A || B || C || D;//取第一个真值或者D,并不会取true/false
######循环语句
- while
while(表达式){语句}
//举例
var i = 1;
while(i<10){
console.log(i);
i = i+1;
}//在chrome中输出0,1,2,3,4,5,6,7,8,9,10 正确打出0~9,10chrome出bug啦
//这种写法不要写
while(true){console.log(1)};//耗CPU性能
//这种写法会进入死循环,原因浮点数精度丢失导致
var a = 0.1;
while(a < 1){
a = a + 0.1;
}
- for
for(var i=0;i < 5; i ++){
console.log(i);
}//最后输出的是0,1,2,3,4,i= ? i为5
break/continue
1.break退出本次循环
for(var i = 0; i < 5;i++){
if(i === 3){
break;
}
}
2.continue 进行下一个循环
for(var i = 0; i < 5;i++){
if(i === 3){
continue;
}
}
label
1.语法
foo:{
console.log(1);
break foo;
console.log(2);
}//1
//Chrome输出的是一个对象,在火狐里面是1
{
foo:1
}
//Chrome输出的1,在火狐里面是1
{
foo:1;
}