zoukankan      html  css  js  c++  java
  • js 扒一扒这些题目都考了哪些知识点

    1.空数组是true还是false

    题目:

    <script>
    var tmp = 'a';
    if([]==false)
        tmp+='b';
    if(![]) tmp +='c';
    alert(tmp);
    </script>
      
    *结果*:
    
    ab

    分析:

    知识点,当任意值与布尔值相比较,都会将两边的值转化为Number

    而[]与false比较,false转换为0,[]为空数组,也转换为0

    但是,因为[]虽然没有元素,但也是一个object,既然是object,在用于判断条件时就会被转换为true。

    因此,得出上面的结果。

    推荐阅读>>js 空数组是true还是false

    引申

    []==[],这样的结果是true还是false呢?

    []数组,在js中的是对象,对象使用==比较都是比较的引用,简单说,就是,如果是同一个对象,就相等,如果不是同一个对象,就不相等,而每次使用[]都相当于新建了一个数组对象,所以[]==[]创建了两个数组对象,是不相等的。

    推荐阅读>>

    js中[]==[],为什么执行结果是false

    js中基本上8中情况的逻辑false情况

    2.循环中的闭包

    题目:

    <script>
    for(var i=0;i<5;i++){
        setTimeout(function(){
            alert(i);
        },500)
    }
    </script>
    *结果*
    
    弹出五次‘5’

    分析:

    这个题目属于非常常见的闭包的坑。

    我们先来分析这个题目。在函数中,alert的这个i变量,在函数中并没有进行声明,那么这个值从哪里来?就近原则,从for循环中取出。找到了i的来源,那么我们来确定i的大小。

    这里我们需要了解setTimeout的机制,我们要知道,setTimeout并不会阻止当前的同步代码,它属于异步函数,它的执行时机依赖于同步代码的执行时间,在我们的这个例子中,alert被丢到异步执行的队列,当轮到alert执行的时候,for循环已经结束,而变量i没有被处理,仍然保持着循环结束时的值,所以,输出结果为5。

    这一部分的内容,建议看一看setTimeout的机制、闭包、异步等知识点

    推荐阅读>>

    理解Javascript的闭包

    JavaScript作用域问题?

    关于JavaScript的问题

    3.定义和调用的顺序

    题目:

    <script>
    a();
    function a(){alert('hello');}
    b();
    var b=function(){alert('world');}
    </script>
    *结果*
    
    hello 报错

    分析:我们来看一下报错原因。

    我们调用b函数的时候,b还没有定义。所以需要把代码第四行和第三行换下顺序,就ok了。

    为什么呢?这里就涉及到了js程序的执行与顺序实现问题。

    页面加载过程中,浏览器会对页面上或载入的每个js代码块或文件进行扫描,如果遇到定义式函数,则进行预处理,处理完成之后再开始由上至下执行;遇到赋值式函数,则只是将函数赋给一个变量,不进行预处理,待调用到的时候才进行处理。

    推荐阅读>>js 程序执行与顺序实现详解

  • 相关阅读:
    数组从文件中读取(接上问题)
    符合json格式要求的字符串转化为json字符串
    json-lib --->入门
    XStream-->别名;元素转属性;去除集合属性(剥皮);忽略不需要元素
    Ajax案例5-->省市联动
    Ajax案例4-->接收后台传递的XML数据
    Ajax案例3-->判断用户名是否被占用
    Ajax案例2-->POST请求
    Ajax案例1-->GET请求
    SecureCRT连接VMWare中的linux系统相关配置
  • 原文地址:https://www.cnblogs.com/ddddemo/p/5623882.html
Copyright © 2011-2022 走看看