• JavaScript经典面试题系列


    1.javascript的typeof返回哪些数据类型
      Object number function boolean underfind

    2.例举3种强制类型转换和2种隐式类型转换?
      强制(parseInt,parseFloat,number)
      隐式(== – ===)

    3.split() join() 的区别
      前者是切割成数组的形式,后者是将数组转换成字符串

    4.数组方法pop() push() unshift() shift()
      Push()尾部添加 pop()尾部删除
      Unshift()头部添加 shift()头部删除

    5.事件绑定和普通事件有什么区别

      事件绑定就是针对dom元素的事件,绑定在dom元素上,普通事件即为非针对dom元素的事件、普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的,而事件绑定(addEventListener)方式添加事件可以添加多个。

      提示:addEventListener不兼容低版本IE,使用addEventListener添加事件之前,请先处理兼容问题。

    普通添加事件的方法:

    1 var btn = document.getElementById("hello");
    2 btn.onclick = function(){
    3     alert(1);
    4 }
    5 btn.onclick = function(){
    6     alert(2);
    7 }

    执行上面的代码只会alert 2 

    事件绑定方式添加事件:

    1 var btn = document.getElementById("hello");
    2 btn.addEventListener("click",function(){
    3     alert(1);
    4 },false);
    5 btn.addEventListener("click",function(){
    6     alert(2);
    7 },false);

    执行上面的代码会先alert 1 再 alert 2


    6.IE和DOM事件流的区别
      1.执行顺序不一样、
      2.参数不一样
      3.事件加不加on
      4.this指向问题

    7.IE和标准下有哪些兼容性的写法
      Var ev = ev || window.event
      document.documentElement.clientWidth || document.body.clientWidth
      Var target = ev.srcElement||ev.target

    8.ajax请求的时候get 和post方式的区别
      一个在url后面 一个放在虚拟载体里面
      有大小限制
      安全问题
      应用不同 一个是论坛等只需要请求的,一个是类似修改密码的

    9.call和apply的区别
      Object.call(this,obj1,obj2,obj3)
      Object.apply(this,arguments)

    10.ajax请求时,如何解释json数据
      使用eval parse 鉴于安全性考虑 使用parse更靠谱
      11.b继承a的方法

    12.写一个获取非行间样式的函数

    方法1:

    function getStyle(obj, attr, value) {
        if (!value) {
            if (obj.currentStyle) {
                return obj.currentStyle(attr)
            }
            else {
                obj.getComputedStyle(attr, false)
            }
        }
        else {
            obj.style[attr] = value
        }
    }

    方法2

    function getStyle(obj, attr) {
        return obj.currentStyle ? obj.currentStyle : getComputedStyle(obj)[attr];
    }

    13.事件委托是什么
      让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!
      
    14.闭包是什么,有什么特性,对页面有什么影响
      闭包就是能够读取其他函数内部变量的函数。一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点:

      1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
      2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
      简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
    1 (function(x, y){
    2     alert(x + y);  
    3 })(2, 3);



    15.如何阻止事件冒泡和默认事件
      canceBubble return false

    16.添加 删除 替换 插入到某个接点的方法
      obj.appendChidl()
      obj.innersetBefore
      obj.replaceChild
      obj.removeChild

    17.解释jsonp的原理,以及为什么不是真正的ajax
      动态创建script标签,回调函数
      Ajax是页面无刷新请求数据操作

    18.javascript的本地对象,内置对象和宿主对象
      本地对象为array obj regexp等可以new实例化
      内置对象为gload Math 等不可以实例化的
      宿主为浏览器自带的document,window 等

    19.document load 和document ready的区别
      Document.onload 是在结构和样式加载完才执行js
      Document.ready原生种没有这个方法,jquery中有 $().ready(function)

    20.”==”和“===”的不同

      ”==”与”===”是不同的,一个是判断值是否相等,一个是判断值及类型是否完全相等。前者会自动转换类型,后者不会。

      先说 ===,这个比较简单。下面的规则用来判断两个值是否===相等: 
        1、如果类型不同,就[不相等] 
        2、如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断) 
        3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。 
        4、如果两个值都是true,或者都是false,那么[相等]。 
        5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。 
        6、如果两个值都是null,或者都是undefined,那么[相等]。 
      再说 ==,根据以下规则: 
        1、如果两个值类型相同,进行 === 比较。 
        2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: 
        a、如果一个是null、一个是undefined,那么[相等]。 
        b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。 
        c、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。 
        d、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。
        e、任何其他组合,都[不相等]。 

      举例: 
        "1" == true 
        类型不等,true会先转换成数值 1,现在变成 "1" == 1,再把"1"转换成 1,比较 1 == 1, 相等。 

      = 赋值运算符 
      == 等于 
      === 严格等于 
      例: 
        var a = 3; 
        var b = "3"; 
        a==b 返回 true 
        a===b 返回 false 
        因为a,b的类型不一样 
        ===用来进行严格的比较判断

    简而言之就是“==”只要求值相等。“===”要求值和类型都相等。


    21.javascript的同源策略
      一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合

    22.编写一个数组去重的方法

            window.onload = function () {
                var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
                for (var i = 0; i < arr.length; i++) {
                    for (var j = i+1; j < arr.length; j++) {
                        if (arr[i] == arr[j]) {
                            arr.splice(j, 1);
                            j--;
                        }
                    }
                }
                alert(arr);
            }

    23.编写一个数组从大到小的排序方法

     1 //数组排序,从大到小,方法1:
     2         var arrSimple=new Array(1,8,7,6);
     3         arrSimple.sort();
     4         document.write(arrSimple.join());    
     5         
     6         //数组排序,从大到小,方法2:
     7         var arrSimple2=new Array(1,8,7,6);
     8         arrSimple2.sort(function(a,b){
     9             return b-a;
    10         });
    11         document.write(arrSimple2.join());
    12   
    13 //解释:a,b表示数组中的任意两个元素,若return > 0 b前a后;reutrn < 0 a前b后;a=b时存在浏览器兼容简化一下:a-b输出从小到大排序,b-a输出从大到小排序。
    14     

    24.如何交换两个数的位置

    var a=10;
    var b=20;
    a= a+b;//30
    b= a-b;//10
    a= a-b;//20
    alert('a:'+a + 'b:'+b);
  • 相关阅读:
    Redis进阶
    redis常用指令
    MarkDown基本语法
    JAVA多线程面试
    使用POI操作Excel
    IDEA+GIT的使用
    获取地址栏的参数
    mybatis逆向工程
    遍历map集合
    springboot批量删除
  • 原文地址:https://www.cnblogs.com/codinganytime/p/5200983.html
Copyright © 2020-2023  润新知