zoukankan      html  css  js  c++  java
  • 前端javaScript经典面试题

    1.alert(1&&2),alert(1||0)

       alert(1&&2)的结果是2

       只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;

       只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

       这个就是只有前面的为对,才能进行下去,而且必须有个返回值。这里主要是因为只有前面的为true,才会进行后面的运算,返回的就是后面的值。如果前面的是false,后面的也就没有意义,直接返回前面的结果。

       alert(0||1)的结果是1

        只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。

        只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。

        这样的就是有个对的就行,但是必须有个返回值,前面的为true,就直接返回前面的值,如果前面的为false,就返回后面的值。

    2.mouseenter和mouseover的区别 

       不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。对应mouseout

       只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。对应mouseleave

       因此在定义鼠标位置使用mouseover的时候会出现常见的冒泡现象。

       阻止冒泡的方法

          W3C: 事件对象.stoppropogation(),

            IE:  事件对象.cancelBubble=true;

    3、正则表达式

    用正则表达式匹配字符串,以字母开头,后面是数字、字符串或者下划线,长度为9-20 

    var reg=new RegExp("^[a-zA-Z][a-zA-Z0-9_]{9,20}$");

    正则表达式分析身份证号码

    身份证号码 = 6位地址编码 + 8位出生日期 + 4位顺序号

    例如:出生日期在1800-2099之间的人的身份证号码的出生日期部分的正则

    (18|19|20){0,1}d{2}(0[1-9]|1[012])(0[1-9]|[12]d|3[01]);
            (18|19|20){0,1}d{2}  确定年份,
            (18|19|20){0,1}       确定年份的前两位  (18|19|20)中匹配,{0,1}表示匹配前一项至少0次最多一次
            d{2}                 确定年份的后两位 d表示匹配[0-9]中的任何一个数,匹配两次
            
            (0[1-9]|1[012])       确定月份,
            0[1-9]                匹配01月-09月,首位是0,在1-9中选一位
            1[012]                匹配10月-12月,首位是1,在[012]中选一位
            
            0[1-9]|[12]d|3[01]   确定日期
            0[1-9]                确定01日-09日
            [12]d                确定10日-29日
            3[01]                 确定30号-31号

    正则表达式不能含有特殊字符

    var reg=new RegExp("^[u4E00-u9FA5a-zA-Z0-9_]{1,20}$");

    reg.test("要检测的字符串");

    test是reg的一个方法符合条件是true,不符合条件返回false

    4、数据存储

    数据存储的几种方式

    cookie在客户端存储数据并发送给服务端,用来存储,获取、删除,要设置过期时间,否则浏览器关闭时过期、但是只能存储字符串类型,以文本的形式,

    localStorage:存储在本地不会发送到服务器,无时间限制,除非手动删除,但是只有新的浏览器才支持。

    session通过类似哈希表的数据结构来存储,能支持任何类型的数据对象,能够含有多个对象,没有大小控制,安全性较高,保存在服务器,随着保存东西的增多,对于用户较多的网站,服务器的压力会变大。

    cookie的存取

    存:

           var expireDate = new Date();
    
             expireDate.setYear(expireDate.getYear()+1900+1);
    
             $cookies.put('account',data.user,{'expires':expireDate.toUTCString()});

    取:    

     $scope.user = $cookies.get('account');

    LocalStorage的存取

    存:

    localStorage.setItem(“name”,”星星”);

    取:

         var username =  localStorage.getItem(“name”);


    session的存取

    存:

     sessionStorage.setItem("cardId",keyCardId);

    取:

     var cardId = sessionStorage.getItem("cardId");

    5、有关作用域和异常捕获

    分析下面代码的输出结果

    1、

    if(true){
       var a = 1;
    }
    cosole.log(a);

    这种情况打印出来是1,因为定义变量在没有函数名称包围的时候,javascript相当于一个大的函数,在if中定义的变量相当于全局变量。

    2、

    function aaa(){
      var a = 1;
      console.log(a);
    }
    console.log(a);
    aaa();

    这种情况打印的是''a未定义'',函数aaa()不再执行,因为上面的报错会影响下面函数的执行。

    3、如何让报错不影响呢,我们可以用try catch

    function aaa(){
    var a = 1;
    console.log(a);
    }
    try{
       console.log(a);
    }catch(e){
    }
    aaa();

    使用try catch把可能出错的console.log(a)包裹起来,这样在这段出问题的时候就不会影响后面的函数的执行。
    4、看trycatch是如何打印出来的

    try{
       console.log(a);
    }catch(e){
        console.log(e);
    }

    这样就可以看到问题具体出在哪里了,而且不会影响后续函数的执行。打印结果如下:

    [object Error]{description: "“a”未定义", message: "“a”未定义", name: "ReferenceEr...", number: -2146823279, stack: "ReferenceEr..."}
  • 相关阅读:
    (JS/JQ)与Ajax
    JS与JQ的DOM处理
    正则表达式
    JS事件大全
    CSS(初级)学习笔记
    HTML学习笔记
    leetcode记录——65. 有效数字
    dp专题
    Hackerrank---A stones game
    组合博弈问题
  • 原文地址:https://www.cnblogs.com/chongzixing/p/8893540.html
Copyright © 2011-2022 走看看