全局作用域,函数作用域,块级作用域(ES6,即一对大括号内{}
);
var定义函数级变量,const定义函数级常量(必须初始化),
let定义块级变量,
const a = "a";//必须赋值
var yo = "Muhaha";
const b = yo;//动态
console.log(a)//输出a
console.log(b)//输出Muhaha
yoo()
var c = "c"
function yoo(){
console.log(c);//输出c
for(let i = 1;i<3;i++) {
var d = "d"
let e = "e"
console.log(e)//输出e,e
}
console.log(d); //输出d
console.log(e); //不输出,e is not defined
}
变量定义自动提升,赋值或引用需要自己提升优先级
console.log(a)//输出undefined
var a = "a"
console.log(a)//输出a
提升后:
var a =
console.log(a)
a = "a"
console.log(a)
变量/函数提升
出题:结合变量提升,函数提升,作用域
;(function(){})()
的作用
对象的类型:本地对象,内置对象,宿主对象
本地对象:如Aarry,Boolean,Date,Number,String,RegExp…
内置对象:Global,Math。
值分为基础类型和引用类型
var a = 2;
var b = a;//b复制a的值
b++;//b和a的值互不影响,b重新赋值
var a = [1,2,3]
var b = a;//b复制a指向数组的指针,通过a/b修改元数组改变会影响a和b
b=[1,2,3,4]//重新赋值后,指针改变,b和a指向不同的元数组,此时通过a/b修改的是不同的元数组
引用:如何理解JavaScript中给变量赋值,是引用还是复制
==
自动转换数据类型再比较;
===
不自动转换并先比较数据类型;
0,null,undefined,NaN,false为false;
{},[],infinity为true;
NaN === NaN 为false;唯一方法:isNaN(NaN)
{}对象的比较:相同指针的对象为true,不同的为false即使数据相同;{}==={}
为false;
仅true === true
为ture,其他都为false
属性:length;
方法:concat()连接,indexOf()检索,match()/search()正则,slice()/substr(index,length)/substring(starIndex,endIndex)提取,split()分割,toString(),valueOf()
转为字符串toString()后substr()/subString();其中substring()参数为非负整数;
属性:length;
方法:concat()连接,join()放入字符串,push()/unshift()增并返回新长度,pop()/shift()删并返回被删元素,sort()排序,slice()提取,splice()分割合并新数组,toString(),valueOf()
变量的解构赋值
新增String方法:iscludes(…)是否包含,stratsWith(…)以…开头,endsWith(…)以…结尾,repeat(…)寻找…。