1.javascript的typeof返回哪些数据类型

string number array object function Boolean undefined 
数组(Array)、日期对象(Date)、正则(RegExp)、 Math =>object 
考点:使用typeof检测数据类型 
扩展:如何检测数组类型? 
Array.isArray(); 浏览器兼容性:IE9+ 
toString.call([]);//”[object Array]” 
[] instanceof Array 
var arr=[]; 
arr.constructor;//Array


  • 用户:   惜. 时间: 2018-12-18 16:37

    var arr =[] console.log(typeof arr) //output object
  • 用户: 指间沙 时间: 2019-01-22 15:25

    怎么返回 array ??

2.例举3种强制类型转换和2种隐式类型转换?

强制类型转换:自己通过函数来进行数据类型转换 
举例:(parseInt,parseFloat,Number()) 
隐式类型转换:JS引擎自动帮我们转换的 
举例:==、 console.log()、 alert() 、if() 、+-*/
扩展:通过==比较两边的值是否相等的结果? 
1==’1’ 
null==undefined


    3.split() join() 的区别

    split()将字符串按照指定的字符分割成一个数组,并返回 
    join()将数组用指定的字符连接成一个字符串,并返回


      4.数组方法pop() push() unshift() shift()

      栈方法: 
      push()尾部添加,返回 数组长度 
      pop()尾部删除,返回 被删除的元素
      队列方法: 
      unshift()头部添加 ,返回 数组长度 
      shift()头部删除,返回被删除的元素


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

        普通事件:给html元素添加一个特定的属性(比如:onclick) 
        事件绑定:js代码中通过标记(id tag class)获取元素,给元素添加特定的方法(比如onclick) 
        传统事件绑定和符合W3C标准的事件绑定有什么区别? 
        div1.onclick=function(){}; 
        1、如果说给同一个元素绑定了两次或者多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 
        2、不支持DOM事件流 事件捕获阶段目标元素阶段=>事件冒泡阶段


          6.addEventListener

          1、如果说给同一个元素绑定了两次或者多次相同类型的事件,所有的绑定将会依次触发 
          2、支持DOM事件流的 
          3、进行事件绑定传参不需要on前端 
          addEventListener(“click”,function(){},false);//此时的事件就是在事件冒泡阶段执行
          ie9开始,ie11 edge:addEventListener
          ie9以前:attachEvent/detachEvent 
          1、进行事件类型传参需要带上on前缀 
          2、这种方式只支持事件冒泡,不支持事件捕获 
          事件绑定是指把事件注册到具体的元素之上,普通事件指的是可以用来注册的事件


            7.IE和DOM事件流的区别


            IE9以前:attachEvent(“onclick”)、detachEvent(“onclick”) 
            IE9开始跟DOM事件流是一样的,都是addEventListener
            比较attachEvent和addEventListener: 
            1、attachEvent只支持事件冒泡 addEventListener既支持事件冒泡,也支持事件捕获 
            2、参数:attachEvent事件类型需要on前缀 addEventListener事件类型不需要on前缀 
            3、如果使用attachEvent对一个元素的目标阶段绑定了多次事件,那么会按照绑定顺序的相反顺序进行触发 
            如果使用addEventListener对一个元素的目标阶段绑定了多次事件,那么会按照绑定顺序进行触发


              8.IE和标准下有哪些兼容性的写法

              a、获取事件对象:var ev = ev || window.event 
              var ev=ev?ev:window.evnet; 
              srcElement:IE9之前的浏览器用来获取事件目标元素 
              target:IE9+、ff、chrome用来获取事件的目标元素 
              b、获取事件目标元素:var target = ev.srcElement||ev.target 
              c、innerText


                9.call和apply的区别

                考点:call和apply的用法
                call和apply相同点:改变函数中this的指向
                不同点:函数参数的传递形式 
                call将函数参数依次传入 
                apply将函数参数用一个数组的形式传入
                无参数调用:
                function fn(){
                    alert(this.name);
                }
                var p1={name:1};
                fn.call(p1);
                fn.apply(p1);
                有参数调用:
                
                function fn2(name,age){
                    this.name=name;
                    this.age=age;
                }
                var p1={};
                fn2.call(p1,"张三",20);
                fn2.apply(p1,["张三",20]);


                  10.如何实现js中的继承

                  1、原型继承的第一种方式:function Cat(name){
                      this.name=name;
                  }
                  //原型继承
                  Cat.prototype.say=function(){
                      alert("你好,我是一只猫,我叫:"+this.name);
                  }
                  2、原型继承第二种方式:
                  function Cat(name) {
                      this.name = name;
                  }
                  function Animal() {}
                  Animal.prototype.run = function () {
                      alert("动物跑");
                  };
                  Cat.prototype = new Animal();
                  Cat.prototype.constructor=Cat;
                  3、借用构造函数
                  function Cat(name,age) {
                      Animal.call(this,name,age);
                  }
                  function Animal(name,age) {
                      this.name = name;
                      this.age=age;
                  }
                  4、经典继承
                  function create(obj) {
                      if(Object.create) {
                      return Object.create(obj);  
                      } else {
                      function F(){};
                      F.prototype = obj;
                      return new F();
                      } 
                  }


                    11.JavaScript this、闭包、作用域

                    this:指向调用上下文
                    作用域:定义一个函数就开辟了一个局部作用域,整个js执行环境有一个全局作用域
                    闭包:一个函数可以访问其他函数中的变量(闭包是一个受保护的变量空间)
                    var f=(function fn(){
                        var name=1;
                        return function(){
                            name++;
                            console.log(name);
                        }
                    })();


                      12.事件委托是什么

                      利用事件冒泡的原理,将事件绑定在父容器中,让父容器代为触发


                        13.闭包是什么,有什么特性,对页面有什么影响

                        闭包就是能够读取其他函数内部变量的函数。 
                        闭包的缺点: 
                        1 更多的内存消耗 
                        2 性能问题(跨作用域访问) 
                        3滥用闭包函数会造成内存泄露,因为闭包中引用到的包裹函数中定义的变量都永远不会被释放,所以我们应该在必要的时候,及时释放这个闭包函数
                        
                        闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。 
                        可以把闭包简单理解成 “定义在一个函数内部的函数”,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包有如下特性: 
                        a. JavaScript允许你使用在当前函数以外定义的变量 
                        b. 即使外部函数已经返回,当前函数仍然可以引用在外部函数所定义的变量 
                        c. 闭包可以更新外部变量的值 
                        d. 用闭包模拟私有方法 
                        由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题


                          14.如何阻止事件冒泡和默认事件

                          阻止事件冒泡: 
                          IE9+ FF Chrome:e. stopPropagation(); 
                          window.event.cancelBubble=true;//ie9之前
                          默认行为:html标签所具有的默认行为,比如: 
                          a、点击a标签,就会默认跳转到指定的页面 
                          b、点击submit按钮,就会自动提交表单 
                          适用场景: 
                          1、异步操作 
                          2、提交表单之前对表单进行一些基本的验证,比如邮箱是否合法,用户名是不是满足指定的格式 
                          为了不让a点击之后跳转,我们就要给他的点击事件进行阻止 
                          3、文本框获得焦点
                          阻止默认行为: 
                          IE9之前:window.event.returnValue=false; 
                          IE9+ FF Chrome: e.preventDefault();


                            15.javascript的本地对象,内置对象和宿主对象

                            本地对象为Array RegExp等可以new实例化 
                            内置对象为global Math 等不可以实例化的 
                            宿主为浏览器自带的document,window 等


                              16.document load 和document ready的区别

                              document.onload 是在结构和样式加载完才执行js 
                              document.ready原生中没有这个方法,jquery中有 $().ready(function)
                              DOMCententLoaded事件:页面的文档结构(DOM树)加载完之后就会触发
                              window.onload:不仅仅要在结构和样式加载完,还要执行完所有的外部样式、图片这些资源文件,全部加载完才会触发window.onload事件


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

                                ==:会自动转换类型 
                                ===:先判断左右两边的数据类型,如果数据类型不一致,直接返回false 
                                之后才会进行两边值的判断
                                1==”1”
                                null==undefined;//==true


                                  18.javascript的同源策略

                                  一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合 
                                  http,ftp:协议 
                                  关键词解释: 
                                  主机名:localhost、www.baidu.com 
                                  协议:http https ftp 
                                  端口:一个网站对应着一个端口, http协议的默认端口:80 
                                  https协议的默认端口是8083 
                                  同源策略带来的麻烦:ajax在不同域名下的请求无法实现, 
                                  如果说想要请求其他来源的js文件,或者json数据,那么可以通过jsonp来解决 
                                  跨域解决方式一 
                                  跨域解决方式二


                                    19.JavaScript是一门什么样的语言,它有哪些特点?

                                    弱类型、脚本语言、面向对象、 
                                    没有标准答案。 
                                    运行环境:JS引擎(v8(Chrome)/SpiderMonkey(FireFox)/JavaScriptCore(Safari) 
                                    /Chakra(IE)) 
                                    语言特性: 
                                    1、面向对象:原型继承、构造函数、原型链 
                                    2、动态语言:弱类型语言