记录自己遇到的一些JS问题,遇到了就持续补充.....
1.变量声明:var a = b = c = 9;相当于 var a = 9; b = 9; c = 9;注意b和c前面没有var,当全局变量看
2.什么情况下if() { }后面的else可以省略?
if大括号{ }里面代码的执行后,if{}语句后面的代码也要执行,此时else可以省略;假如if{}括号里面的执行了,大括号if{}后面就不执行了,则需要else。如下代码:因为需要循环比较,所以不加else
//求下列数组最大值
let arr = [2, 6, 1, 77, 52, 25, 7];
let theMax = arr[0];
for (i = 1; i < arr.length; i++) {
if (arr[i] > theMax) {
theMax = arr[i];
}
}
console.log(theMax);
3.预解析、变量提升
js引擎运行js分为两步:预解析和代码执行。
1)预解析:js引擎把js里面的所有var还有function提升到当前作用域的最前面
2)代码执行:按照代码书写的顺序从上往下执行
console.log(num)//单独输出num会报错
-----------------------------------------------------------------------------
consolo.log(num)//undefined,先log输出,再用var声明变量,结果是undefined
var num = 10;
//let num = 10;//使用let会直接报错,需要先声明再使用
预解析分为变量预解析(变量提升)和函数预解析(函数提升)
1)变量提升:就是把所有的变量声明提升到当前作用域的最前面,只提升变量声明,不提升赋值操作
2)函数提升:就是把所有的函数声明提升到当前作用域的最前面,不调用函数
4.indexOf:indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,如果要检索的字符串值没有出现,则该方法返回 -1。。
使用:String.indexOf(str,fromindex)。str:要检索的字符串;fromindex:从哪里开始检索,如果不写,默认从索引值为0(String的首字符)开始。
坑点:是对字符串使用indexOf检索一个空字符串' ',返回值是0而不是-1,例如:
let str = 'abcde'
console.log(str.indexOf(''))//0