JavaScript基础

★★★★★

  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+$;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,585评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,923评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,314评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,346评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,718评论 3 291
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,828评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,020评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,758评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,486评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,722评论 2 251
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,196评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,546评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,211评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,132评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,916评论 0 200
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,904评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,758评论 2 274

推荐阅读更多精彩内容

  • 1.HTML DOM (Document Object Model) document.getElementByI...
    廖马儿阅读 1,366评论 0 17
  • 转载请声明出处 博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课...
    程序员poetry阅读 12,579评论 13 94
  • 语法基础 - 词法 字符集 Unicode字符集, 区分大小写 注释 // /* */ 直接量 数字 小数 字符串...
    KeKeMars阅读 832评论 1 11
  • JavaScript基础 JavaScript简介JavaScript对象 JavaScript简介 为什么使用j...
    廖少少阅读 520评论 0 4
  • 这一篇主要看甲木日干和地支相配,在其他五行环境中,人的性格特征、价值取向等问题。如甲寅、甲辰、甲午、甲申、甲戌、甲...
    曙雀星河阅读 55,153评论 0 44