美文网首页
JavaScript基础

JavaScript基础

作者: zydragon | 来源:发表于2017-01-29 16:07 被阅读0次

    ★★★★★

    1. call和apply的含义和区别
    • apply----应用某一对象的一个方法,用另一个对象替换当前对象
      B.apply(A, arguments);即A对象应用B对象的方法。
    • call----调用一个对象的一个方法,以另一个对象替换当前的对象
      B.call(A, args1,args2);即A对象调用B对象的方法。
    • 区别在于:传参形式不同,apply只能接收两个参数,对象和一个数组,如果没有提供这两个参数,thisObj=global对象,并且无法传参;call可以接收多个参数,使当前this实例指针保持一致,或者在特殊情况下需要改变this指针。如果没有提供thisObj参数,那么 Global 对象被用作thisObj。
    1. javascript的数据类型 和内存存储
    • 基本数据类型和引用数据类型;number、string、boolean、NaN、undefined;对象数据类型和函数数据类型;
    • 基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象。
    • 基本类型数据在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的;
      引用数据类型,值大小不固定,存放在堆内存中,地址存放在栈内存中,是按引用访问的。


      内存存储
    1. 如何解决跨域?
      想要访问其他网站上的js脚本,使用ajax会遇到跨域问题,跨域问题来源于同源策略,为了数据安全,ajax规定不能跨域访问。
    • jsonp解决跨域
      首先<script>标签对是不受同源策略限制的,它可以载入任意地方的js文件,并不要求同源。
      jsonp理念就是,我和服务器端约定好一个函数名,当我请求文件的时候,服务器返回一段JavaScript代码,这段代码调用了我们约定好的函数,并将数据以参数的形式传入。数据以json的格式返回
      你需要获取数据的页面 index.html:
      <script>
      function getWeather(data) {
      console.log(data);
      }
      </script>
      <script src="http://x.y.com/xx.js">
      ------------------

       [http://x.y.com/xx.js](http://x.y.com/xx.js) 文件内容:
       getWeather({
            "城市": "北京", 
            "天气": "大雾"
       });
      
    • 服务端代理解决跨域
      接收到客户端请求以后,经由本域服务器代理向目标服务器发送请求,并将响应数据返回客户端。

    1. 同步和异步的区别?
      JavaScript将任务的执行模式分为:同步(Synchronous)和异步(Asynchronous)。
      JavaScript语言的执行环境是"单线程",就是指一次只能完成一个任务。如果有多个任务就必须排队,前面一个任务完成,再执行后面的任务,一次类推。这便是"同步模式",程序的执行顺序和排列顺序是一致的,同步的;"异步模式"则完全不同,每一个任务有一个或多个回调函数,前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等待前一个任务结束就执行,程序的执行顺序和排列顺序不是一致的,异步的。锅里正煲着汤,同时我在为下一道菜做着准备。
    • 同步模式,任务耗时长,常见的浏览器无响应,卡住其他任务无法进行
    • 异步模式,非常重要,在浏览器端,耗时很长的操作都应该异步执行,避免浏览器失去响应,最好的例子就是Ajax操作。在服务器端,"异步模式"甚至是唯一的模式,因为执行环境是单线程的,如果允许同步执行所有http请求,服务器性能会急剧下降,很快就会失去响应。
    1. 字符串函数和数组函数
      (1) 字符串函数

      • str.charAt(下标)----返回指定位置的字符
        str.charCodeAt(下标)----返回指定位置字符的ASCII值
        str.fromCharCode(编码1,编码2,…)----接收一个或多个ASCII值,返回对应的字符

      • 查找类型

        • str.indexOf(字符)----返回该字符在字符串中首次出现的位置,若字符不存在则返回-1;
        • str.lastIndexOf(字符)----返回该字符在字符串中最后一次出现的位置,若字符不存在则返回-1;
        • str.match(字符)----在字符串中查找字符,若存在则返回该字符,若不存在则返回null;
        • str.replace(被替换的字符串,新字符串)----返回替换后的新字符串,不会影响原来的字符串。
    • 截取类型

      • str.splice(start,end)----从指定的位置开始,到指定的位置结束,返回截取的字符串,不会影响原来的字符串。支持负数,从后往前数。
      • str.substring(start,end)----不支持负数
      • str.substr(start,length)----从指定的位置开始,到指定的长度结束,不支持负数。
    • 转换类型

      • str.split("分隔符",length)----将字符串按指定的分隔符转换为数组
      • str.toLowerCase()/str.toUpperCase()----将字符串中英文字母转换为小写/大写

    (2) 数组函数

    *  添加删除类
      * arr.push()----在数组后面添加元素,返回数组的长度,会影响原数组
      * arr.pop()----在数组后面删除一个元素,返回被删除的元素,会影响
      * arr.unshift()----从前面添加元素,返回值为数组的长度,会影响原数组
      * arr.shift()----从数组的前面删除一个元素,返回值为删除的元素,会影响原数组
      * arr.splice(index,数量,添加的元素1,2,...)----万能的添加删除函数,index表示要操作的元素位置下标,数量:0表示添加,返回值空白,0以外数字表示删除的个数,返回删除的元素
    
    • 转换类型
      • arr.join("分隔符")----返回值为新字符串,参数不传时默认为","
    • 数组连接
      • arr.concat(arr1,arr2)----不会影响原数组
    • 数组截取
      • arr.slice(start,end)
    • 数组排序
      • myarr.sort([callback])----callback省略时,默认按ASCLL排序;升序降序
    1. 事件委派
    • 事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。
    • 利用事件冒泡这一特性,指定一个事件处理程序,管理这一类的所有事件,在他的父元素或更高元素设置事件处理程序,将子元素事件委托给父元素事件。达到省时省力的效果。
    1. document load 和document ready的区别
    • ready----表示文档结构已经加载完成(不包含图片等非文字媒体文件)
      $(function(){})===$(document).ready(function(){})
    • load----表示页面包含图片等文件在内的所有元素都加载完毕
      window.onload=function(){}
    1. 一个接口为ajax/api.jsp,请求方式为GET,有一个名为ulr的参数。值为当前页面的URl,正常情况下,返回到内容是{result:true,mes:"success"},请用ajax组件,写一段在正常浏览器可以运行的代码,将结果解析成json的对象格式

    ★★★★

    1. JavaScript的基本命名规范
    • 首先区分大小写,命名可以以字母、字母下划线或$开头,不能使用关键字和保留字,习惯驼峰命名法,首字母大写命名法。命名一定要有意义。中文也是合法的标识符,可以用作变量名。
    1. JavaScript的原型和原型链,有什么特点?
    • 每个对象都会在其内部初始化一个属性,就是prototype属性,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype中去找这个属性,这个prototype又有自己的prototype,于是就这样一直找下去(这样一直找下去就是Object内置对象),这就是原型链。
    • 特点:JavaScript对象是通过引用来传递的,当我们修改原型对象时,与之相关的对象也会继承这一改变。
    1. JavaScript如何实现继承?
    • 构造继承
    • 原型继承
    • 实例继承
    • 拷贝继承
    • 原型prototype机制或applycall方法去实现较简单,一般使用构造函数与原型混合方式
    1. JavaScript作用域链
    • 全局作用域和局部作用域
    • 当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找,直至全局函数,这种组织形式就是作用域链。
    • 子对象会一级一级地向上寻找所有父对象的变量
    • 代码优化:尽量少使用全局变量,尽可能使用局部变量。
      //这个函数引用了两次全局变量document,查找该变量必须遍历整个作用域链,
      //直到最后在全局对象中才能找到。
      function changeColor(){
      var doc=document;
      doc.getElementById("btnChange").onclick=function(){
      doc.getElementById("targetCanvas").style.backgroundColor="red";
      };
      }
    1. null和undefined的区别
    • null对象----表示"没有对象",此处不应该有值。
      (1) 作为函数的参数,表示该函数的参数不是对象。
      (2) 作为对象原型链的终点。
    • undefined----表示"缺少值",此处应该有值但没有定义
      (1)变量被声明了,但没有赋值时,就等于undefined。
      (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
      (3)对象没有赋值的属性,该属性的值为undefined。
      (4)函数没有返回值时,默认返回undefined。
    1. 什么是闭包,为什么使用它?
    • JavaScript的作用域,从外部无法调用函数内的局部变量
    • 闭包就是能够读取其他函数内部变量的函数,由于在JavaScript语言中,只有函数内部的子函数才能读取局部变量,因此可以简单的理解为:定义在一个函数内部的函数。
    • 作用:可以从外部调用函数内的局部变量;将这些变量的值始终保存在内存中。
    1. new操作符究竟干了些什么?
      function New (f) {
      /1. 创建对象并设置原型链/
      var n = { 'proto': f.prototype };
      return function () {
      /2. 设置this指向/
      f.apply(n, arguments);
      /3. 返回函数/
      return n;
      };
      }
    2. 写一个js函数,将地址参数解析为一个对象
    3. 删除数组中的重复元素
    4. 如何判断某个对象是否是某个类的实例化?
    5. 添加事件的方式?
    6. IE和doms事件的区别
    7. DOM 节点的所有操作和方法
    8. 强转和隐式类型转化

    ★★★

    1. JavaScript创建对象的几种方式
    • 字面量方式(json格式)
    • new关键字
    • 构造函数function
    • 混合型创建 function+prototype+new
    1. 什么是window对象? 什么是document对象?
    • window对象----浏览器中一个打开的窗口对象,是一个顶层对象
      document对象----html文档对象,可用来访问页面中的所有元素,是window对象的成员对象子对象
    1. ["a","b","c"].map(parseInt)的结果是什么?
    2. javascript 中的“use strict”是什么意思?使用它区别是什么?
    3. 求两个正整数的最大公约数
    4. ”==”和“===”的不同
    5. json和jsonp有什么差异?
    6. ajax 和jsonp的区别
    7. j延迟加载的方式
    8. 如何用js实现类,成员,私有变量?
    9. eval的作用
    10. js的兼容性问题
    11. 继承的顺序
    12. 解释jsonp的原理,以及为什么不是真正的ajax
    13. javascript的本地对象,内置对象和宿主对象

    ★★

    1. document.write 和innerHTML的区别?
    2. 使用闭包的例子
    3. 什么是cookie隔离?
    4. 所有可以在浏览器保存数据,然后下次访问的方式
    1. 哪些操作会造成内存泄露?
      内存泄露可以定义为应用程序不再需要的内存,因为某种原因其不会返回到操作系统或可用内存池。 会导致迟缓,崩溃,高延迟等应用问题。
    2. 声明变量忘记使用关键字var创建一个意外的全局变量
    * 为了防止这些错误发生,添加'use strict'; 在您的JavaScript文件的开头。 这使得能够更严格地解析JavaScript以防止意外的全局变量。
    
    1. 被遗忘的事件函数或回调函数
    2. 脱离 DOM 的引用
    3. 闭包
    4. javascript的同源策略
    • 首先同源是指两个url的协议,域名和端口相同
    • 同源策略是浏览器上为安全性考虑实施的安全策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。
    • 比如一个恶意网站的页面通过iframe嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。同源策略就是为了解决这类问题而出现的。
    • 在浏览器中,<script>、< img>、<iframe>、<link>等标签都可以加载跨域资源,而不受同源限制,但浏览器限制了JavaScript的权限使其不能读、写加载的内容。
    • 另外同源策略只对网页的HTML文档做了限制,对加载的其他静态资源如javascript、css、图片等仍然认为属于同源。
    1. 本地对象,内置对象,宿主对象
    • 本地对象----独立于宿主环境的ECMAScript实现提供的对象需要实例化的对象都为本地对象
      Function Object Array Number String Boolean Date() 正则RegExp()
    • 内置对象----由ECMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现。global对象和math对象
    • 宿主对象----由ECMAScript实现的宿主环境提供的对象,即我们网页的运行环境(操作系统和浏览器),所有的BOM和DOM都是宿主对象。
    1. this 的情况
    • 在普通函数中,this指向的window对象
    • 在构造函数中,this指向的是实例化的对象
    • 在方法中,this指向的是调用该方法的对象
    • 在事件中,this指向的是事件触发的对象
    1. 下面哪种写法会报错?
      A: var a=();
      B: var a={};
      C: var a=[];
      D: var a=/ /;

    1. 如果你手动实现动画,你认为最小的时间间隔是多少?
    2. 十六进制颜色转化为rgb颜色
      var sRgb = "RGB(23, 245, 56)" , sHex = "#34538b";
      var sHexColor = sRgb.colorHex(); //rgb颜色转换为十六进制颜色
      var sRgbColor = sHex.colorRgb(); //十六进制颜色转换为rgb颜色
    3. 下面哪种写法可以匹配一个正整数
      A: ^[1-9]\d1.$;
      B: ^[1-9]+$;
      C: ^[0-9]\d1.$;
      D: ^[1-9]\d+$;

    相关文章

      网友评论

          本文标题:JavaScript基础

          本文链接:https://www.haomeiwen.com/subject/dwpqittx.html