ECMAscript测试题讲解

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
    
    • */
      第十题:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值