var let const 的差别
-var :
支持全局、函数作用域、不支持块作用域
接受重复声明
变量预解析
-let:
不接受重复声明
不存在变量提升
支持块作用域
支持函数作用域
-const:
特性同let
一旦声明、常量的值就不可以改变
<script>
var a = 1;
let b = 1;
if(true){
var a = 3;
let b = 3;
}
console.log(a,b);
/*
var 支持作用域
- 全局
- 函数
let 支持作用域
- 全局
- 函数
- 块
*/
</script>
结果为:3 1
classlist属性:
add:添加属性
remove:删除属性
contains:包含
<style>
.box{
width: 200px;
height: 200px;
border:1px solid #000;
}
.box1{
background: red;
}
.box2{
background: green;
}
</style>
<div class="box box1"></div>
<script>
var box = document.querySelector('.box');
box.onclick = function () {
console.dir(this);
this.classList.add('box2')
setTimeout(()=>{
this.classList.remove('box2')
},1000)
}
</script>
math.max:返回一组数组中最大的
math.min :返回一组数组中最小的
var x = 10,
y = 20,
z = 5;
var a = Math.min(x,z,y)
var b = Math.max(x,z,y)
console.log(a,b);
数组方法:
foreach :循环数组或集合中的对象、数据
every:测试数组中的所有元素是否都通过了指定函数的测试
some:测试数组的某个元素是否都通过了指定函数的测试
reduce:循环数组中的每一项进行累计操作
<script>
/*
* A. if('21'<'15'){alert(1)}
B. if(15-15){alert(1)}
C. if('21'<15){alert(1)}
D. if('5'+0){alert(1)} √
if(表达式 - 条件){
//条件为真执行的代码
}
* */
/*
* '21'<'15'
*
* 字符串之间的比较,是按照从左到右的顺序,逐位进行比较,按照unicode码的大小
*
*
* charCodeAt(index)
* 用于获取指定索引值位置的unicode
*
* */
var a = '21';
var b = '15';
console.log(a.charCodeAt(0));
console.log(b.charCodeAt(0));
//15-15 = 0 => false
/*
*
* 隐式类型转换
* '21'<15
* '21'=>21 21<15 =>false
* */
// '5'+0 =》 '50' => true
/*
*
* +作用:
* 加法运算
* 字符串拼接:左右两侧只要有一侧是字符串,那么就是字符串拼接
* 正
* */
</script>
第二题:
<script>
/*
*
* var i = 0,j = 0;
* j<6,i<10
for(;i<10,j<6;i++,j++){
k = i + j;
};
console.log(k);
for(变量初始化;执行条件;改变变量){}
* */
// var i;
// for(i=0;i<5;i++){
// console.log(i);
// }
// console.log(m);
// function fn() {
// a = 20;
// }
// fn();
// console.log(a);
/*
*
* 逗号运算符
* **返回最后一位**
* */
</script>
第三题:变量预解析
<script>
/*
*
* fn1();
var fn1 = function(a){ alert(a); }
* */
var a;
console.log(a);
a = 1;
/*
* 变量与解析
* var a;
* a = 1;
* */
var fn1;
fn1();
fn1 = function(a){ alert(a); }
**要声明var**
// fn1 is not a function
</script>
第四题:
<script>
/*
* var x = 1;
function fn(n){n = n+1};
y = fn(x);
return
函数不具备返回值的功能,必须return之后才能返回
* */
function fn() {
var a = 1;
return a;
}
var b = fn();
console.log(b);
</script>
var作用域:全局作用域、局部作用域、不支持作用域
第五题:
<script>
function fn1() {
var a = 0;
function fn2() {
++a;
alert(a);
}
return fn2;
}
fn1()(); //1
// var a = fn1();
// console.log(a);
var newFn = fn1();
newFn();//1
newFn();//2
/*
* 作用域链
* - 一层层向上进行查找
* */
</script>
垃圾回收:
function fn() {
var a = 1;
a = a+1;
console.log(a);
}
fn();
fn();
/*
* 垃圾回收
* 把用不到的变量等等的东西进行回收
*
* */
第六题:闭包、定时器
<script>
/*
* for(var i = 0; i < 5; i++) {
setTimeout(function(i) {
return function() {
console.log(i);
};
}(i), i * 1000);
}
* */
// for(var i = 0; i < 5; i++) {
// setTimeout(function () {
// console.log(i);//55555
// },i*1000)
// }
// for(var i = 0; i < 5; i++) {
// setTimeout(fn(i), i * 1000);
// }
/*
*
* fn(0)
* fn(1)
* fn(2)
* ...
* */
// function fn(a) {
// return function () {
// console.log(a);
// };
// }
for(let i=0;i<5;i++){
setTimeout(function () {
console.log(i);
},i*1000)
}
</script>
第七题:
+的多种作用
加减法、字符串拼接、正号使用
运算符优先级
隐式类型转换
<script>
// (!+[]+[]+!+[]).length
console.log( (!+[]+[]+!+[]));
!(+[])+[]+!(+[]);
!0+[]+!0
true + [] + true
true + '' + true
'true'+true
'truetrue'
console.log(+[]);
console.log(typeof +'2');
+[1,2];
//[] => '' => 0 先调用toString然后再调用toNumber
/*
* 隐式类型转换
*
* */
/*
*
* 取反
* +号功能
* 1. 加法运算
* 2. 字符串拼接
* 3. 正号使用
* */
第八题:tostring
<script>
/*
*
* 100['toString']['length'] 的结果是()
*
* length表示的是toString调用时候的参数长度
* toString(进制)
*
*
* */
// console.dir(100['toString']['length']);
function fn(x,y) {
}
console.dir(fn);
var a = 4;
//100
console.log(a.toString(2));
</script>
第九题:
/*
*
* every
* 循环数组中的每一项,执行一个指定的函数,返回true
-
some
-
循环数组中的每一项,执行一个指定的函数,只要其中有一个符合条件,就返回true
- */
第十题:
- */