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


  • 用户: 多看点书 时间: 2019-05-05 21:31

    tostring string number + == if
  • 用户: 多看点书 时间: 2019-05-05 21:33

    boolean
  • 用户: 多看点书 时间: 2019-05-05 21:34

    isnan
  • 用户: 多看点书 时间: 2019-05-05 21:35

    隐 isnan &&! ||

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、动态语言:弱类型语言