一、JavaScript 的 typeof 返回哪些数据类型?

1、基础类型 :Number 、String、Boolean、Null、Undefined、

Symbol(该类型是ES2015中新增类型:表示独一无二的值。)

2、引用类型:Object

typeof 运算符把类型信息以字符串形式返回,需要注意的是 typeof 返回的类型和 JavaScript 定义的类型有细微的差异。

typeof 返回七种可能的值:“number”、“string”、“boolean”、“object”、"symbol"、“function”和“undefined”。

二、请写出以下运算结果:

alert(typeof null);  // object
alert(typeof undefined);  // undefined
alert(typeof NaN);  // number
alert(NaN == undefined);  // false
alert(NaN == NaN);  // false
var str = "123abc";
alert(typeof str++);  // number
alert(str);  // NaN

三、例举至少 3 种强制类型转换和 2 种隐式类型转换?

1. 强制类型转换: 明确调用内置函数,强制把一种类型的值转换为另一种类型。

强制类型转换主要有:Boolean、Number、String、parseInt、parseFloat

2. 隐式类型转换: 在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加。之所以不同的数据类型之间可以做运算,是因为 JavaScript 引擎在运算之前会悄悄的把他们进行了隐式类型转换。隐式类型转换主要有:+、–、==、!

四、JavaScript 的事件流模型都有什么?

事件流描述的是从页面中接收事件的顺序。 DOM 结构是树形结构,当页面中的某一个元素触发了某个一个事件,事件会从最顶层的 window 对象开始,向下传播到目标元素,途径的祖先节点都会触发对应的事件,如果当前节点的该事件绑定了事件处理函数的话,则会执行该函数当事件达到目标元素并执行绑定函数(如果有绑定的话)后,事件又会向上传播到 window 元素,途径的祖先节点都会触发对应的事件(如果绑定事件处理函数的话)

事件流包含三个阶段:

  • 事件捕捉阶段
  • 处于目标阶段
  • 事件冒泡阶段

1、事件捕捉阶段:事件开始由顶层对象触发,然后逐级向下传播,直到目标的元素;

2、处于目标阶段:处在绑定事件的元素上;

3、事件冒泡阶段:事件由具体的元素先接收,然后逐级向上传播,直到不具体的元素;

五、BOM 对象有哪些,列举 window 对象?

1、window 对象,是 JS 的最顶层对象,其他的 BOM 对象都是 window 对象的属性;

2、location 对象,浏览器当前URL信息;

3、navigator 对象,浏览器本身信息;

4、screen 对象,客户端屏幕信息;

5、history 对象,浏览器访问历史信息

六、请简述 AJAX 及基本步骤?

  • 简述 AJAX:AJAX即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

AJAX 基本步骤:

1、初始化ajax对象

2、连接地址,准备数据

3、发送请求

4、接收数据(正在接收,尚未完成)

5、接收数据完成

//初始化ajax对象var xhr = new XMLHttpRequest();//连接地址,准备数据xhr.open(“方式”,”地址”,是否为异步);//接收数据完成触发的事件xhr.onload =function(){}//发送数据xhr.send();

七、HTTP 状态消息 200 302 304 403 404 500 分别表示什么?

200:请求已成功,请求所希望的响应头或数据体将随此响应返回。

302:请求的资源临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在 Cache-Control 或 Expires 中进行了指定的情况下,这个响应才是可缓存的。

304:如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。

403:服务器已经理解请求,但是拒绝执行它。

404:请求失败,请求所希望得到的资源未被在服务器上发现。

500:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。

八、同步和异步的区别?

  • 首先同步异步于阻塞非阻塞并没有关系。同步异步主要是事情做完以后,如何进行处理、或者说关注的是一种消息通信机制。
  • 同步的情况下,是由处理消息者自己去等待消息是否被触发;
  • 而异步的情况下是由触发机制来通知处理消息者;

● 阻塞非阻塞,主要是对于请求者而言的。

● 阻塞:发出请求等待结果返回,然后再处理后续的事情;

● 非阻塞:发出请求不等待结果返回,可以接着做后续的事情;

举例:

1、同步:老师在使用同步思考的时候,你可以静静的等待老师给出答案,也可以边做自己的事情边等待老师的回答,当然这时候你需要时刻去关注老师是否已经想好了,在程序中需要进行轮询了。

2、异步 :老师使用异步的方式,这个时候老师告诉你可以先去做别的,好了就通知你,那么你可以去做点别的,然后监听事件就行,当然你也可以很轴,我就不做别的!我要一直等着老师“想好了”的事件发生。

所以同步可以是阻塞的也可以是非阻塞的,异步也是如此。

九、GET和POST的区别,何时使用POST?

GET和POST的区别:

GET:一般用于查询数据,使用URL传递参数,由于浏览器对地址栏长度有限制,所以对使用get方式所发送信息的数量有限制,同时浏览器会记录(历史记录,缓存)中会保留请求地址的信息,包括地址后面的数据。get 只能发送普通格式(URL 编码格式)的数据。

POST:一般用于向服务器发送数据,对所发送的数据的大小理论上是没有限制,浏览器会缓存记录地址,但是不会记录 post 提交的数据。post 可以发送纯文本、URL编码格式、二进制格式的字符串,形式多样。

在以下情况中,请使用 POST 请求:

1、以提交为目的的请求(类似语义化,get 表示请求,post 表示提交);

2、发送私密类数据(用户名、密码)(因为浏览器缓存记录特性);

3、向服务器发送大量数据(数据大小限制区别);

4、上传文件图片时(数据类型区别);

十、 AJAX 的局限性?

1、AJAX 不支持浏览器 back 按钮。

2、安全问题 AJAX 暴露了与服务器交互的细节。

3、对搜索引擎的支持比较弱。不会执行你的 JS 脚本,只会操作你的网页源代码;

4、跨域请求有一定限制。解决方式:jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面。

5、破坏了程序的异常机制。

十一、new 操作符具体干了什么呢?

1、创建一个新对象;

2、把函数中上下文(作用域)对象this指向该对象;

3、执行代码,通过this给新对象添加属性或方法;

4、返回对象;

十二、null 和 undefined 的区别?

null: null表示空值,转为数值时为0;

undefined:undefined表示"缺少值",就是此处应该有一个值,但是还没有义。

1、变量被声明了,但没有赋值时,就等于undefined。

2、对象没有赋值的属性,该属性的值为undefined。

3、函数没有返回值时,默认返回undefined。

十三、JavaScript 原型,原型链 ? 有什么特点?

JavaScript 原型: 每创建一个函数,函数上都有一个属性为 prototype,它的值是一个对象。 这个对象的作用在于当使用函数创建实例的时候,那么这些实例都会共享原型上的属性和方法。

原型链: 在 JavaScript 中,每个对象都有一个指向它的原型(prototype)对象的内部链接(proto)。这个原型对象又有自己的原型,直到某个对象的原型为 null 为止(也就是不再有原型指向)。这种一级一级的链结构就称为原型链(prototype chain)。 当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止;到查找到达原型链的顶部(Object.prototype),仍然没有找到指定的属性,就会返回 undefined

十四、实现对数组进行乱序

数组的 sort() 方法,因为是乱序,所以还需要用到 Math.random() 产生随机数,打乱排序规律!

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];a.sort(function(a, b) {return Math.random() - 0.5});//[3, 1, 4, 5, 7, 6, 2, 9, 8, 10]
//按数字大小排序function sortNumber(a,b) {return a - b}a.sort(sortNumber);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
//重新给打乱的排序(不是按数字大小)a.sort();//[1, 10, 2, 3, 4, 5, 6, 7, 8, 9]

十五、实现一个函数 clone(),可以对 JavaScript 中的5种主要的数据类型(包括 Number、String、Object、Array、Boolean)进行值复制。

function clone(obj) {//判断是对象,就进行循环复制if (typeof obj === 'object' && typeof obj !== 'null') {// 区分是数组还是对象,创建空的数组或对象var o = Object.prototype.toString.call(obj).slice(8, -1) === "Array" ? [] : {};for (var k in obj) {// 如果属性对应的值为对象,则递归复制if(typeof obj[k] === 'object' && typeof obj[k] !== 'null'){o[k] = clone(obj[k])}else{o[k] = obj[k];}}}else{ //不为对象,直接把值返回return obj;}return o;}

考察:

1、使用 typeof 判断值得类型;

2、使用 toString 区分数组和对象;

3、递归函数的使用;

十六、cookie和localStorage的区别:

1.cookie和localStorage的区别共同点 都是存储在浏览器端的区别

  • 第一个区别(存储)

1.cookie:cookie数据始终在同源的http请求中携带(即使不需要),

即cookie在浏览器和服务器之间来回传递。

  • 第二个区别(大小)

1.cookie:可以限制cookie只属于某个路径下,存储大小限制不同,cookie数据不能超过4k

2.localStorage:比cookie大很多,最大8M

  • 第三个区别(有效期)

1.cookie:只在设置的cookie过期时间之前有效

2.localStorage:始终有效,窗口或浏览器关闭一直保存,因此用作持久保存数据

2.session和cookie的区别

cookie:

1.数据存放在客户端浏览器上

2.不是很安全,可以在本地修改cookie

3.没有安全性问题的时候可以用cookie

session:

1.数据存放在服务器上

2.session相对安全

3.session有过期时间,在时间内保存在服务器上,当访问次数太多,会比较占用服务器的性能,所以在这种情况下应该选cookie

十七:统计字符串中字母个数或统计最多字母数。

var str = "aaaabbbccccddfgh";var obj = {};for(var i=0;i<str.length;i++){var v = str.charAt(i);if(obj[v] && obj[v].value == v){obj[v].count = ++ obj[v].count;}else{obj[v] = {};obj[v].count = 1;obj[v].value = v;}}for(key in obj){document.write(obj[key].value +'='+obj[key].count+'&nbsp;'); // a=4 b=3 c=4 d=2 f=1 g=1 h=1}

JavaScript 面试总结相关推荐

  1. 好程序员Java教程分享JavaScript面试问题及答案(一)

    好程序员Java教程分享JavaScript面试问题及答案(一) 1.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个 ...

  2. JavaScript 面试中常见算法问题详解

    JavaScript 面试中常见算法问题详解,翻译自 https://github.com/kennymkchan/interview-questions-in-javascript.下文提到的很多问 ...

  3. 前端必备,JavaScript面试问题及答案

    前端必备,JavaScript面试问题及答案 1.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱? 尽管 typ ...

  4. JavaScript面试时候的坑洼沟洄——表达式与运算符

    上篇博客JavaScript面试时候的坑洼沟洄--数据类型总结了一下JavaScript数据类型几转换的相关知识,很多朋友可能和我一样,买了书后对数据类型啊.运算符啊.语句啊都是扫两眼或直接略过的,自 ...

  5. javascript面试_在编码面试中需要注意的3个JavaScript问题

    javascript面试 JavaScript is the official language of all modern web browsers. As such, JavaScript que ...

  6. JavaScript面试的完美指南(开发者视角)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 面试季手册. 原文:javascript 面试的完美指南(开发者视角) 作者:前端小智 Fundebug经授权转载,版 ...

  7. 如何在 JavaScript 面试中过五关斩六将?

    JavaScript 面试不容易.我觉得难,你也觉得不容易,大家的意见不谋而合.在 JavaScript 面试中被问问题的概率通常很高.那么该如何破解 JS 面试?突破口在哪儿?本文旨在通过学习基本概 ...

  8. 前端面试题汇总(JavaScript面试纯干货)

    前端面试题汇总(JavaScript面试纯干货) 1 闭包 闭包就是能够读取其他函数内部变量的函数 闭包是指有权访问另⼀个函数作⽤域中变量的函数,创建闭包的最常⻅的⽅式就是在⼀个函数内创建另⼀个函数, ...

  9. 70个JavaScript面试问题

    70个JavaScript面试问题 1.undefined 和 null 有什么区别? 在理解undefined和null之间的差异之前,我们先来看看它们的相似类. 它们属于 JavaScript 的 ...

  10. 征服 JavaScript 面试:什么是闭包?| Eric Elliott

    "征服 JavaScript 面试"是我写的一系列文章,来帮助面试者准备他们在面试 JavaScript 中.高级职位中将可能会遇到的一些问题.这些问题我自己在面试中也经常会问. ...

最新文章

  1. andriod studio 注释乱码问题
  2. notepad++ html格式化
  3. java判断字符串中是否包含中文 过滤中文
  4. 详解CAPM的数学推导
  5. JavaScript --- 跨浏览器的事件对象
  6. CSS3属性——(一)
  7. 不会演讲的你,一开口就输了!
  8. Qt工作笔记-QFileSystemModel创建文件系统信息模型
  9. P1155 双栈排序
  10. vue.js环境部署
  11. 软件开发之文档的重要性
  12. 小Z解读:企业证书利用itms-services协议分发应用在蜂窝网络下的限制
  13. IDM下载---一键安装版
  14. 超立方体(n方体)Qn:递推式 和 性质
  15. 典型用户和用户场景描述
  16. Python【词云】《长恨歌》
  17. 望京有没有可能成为下一个硅谷?
  18. C++ [进制转换]十六进制转化为二进制
  19. duck typing java_Duck typing
  20. IAR安装与破解WIN7版本

热门文章

  1. VC之CString,wchar_t,int,string,char*之间的转换
  2. 查看ELK集群的状态命令
  3. 【Oracle】分区表中索引状态为N/A
  4. 网络管理与维护作业4
  5. springBoot(5)---单元测试,全局异常
  6. 乐观锁 与 悲观锁 来解决数据库并发问题
  7. ./configure:command not found 解决方法
  8. vue 单页面(SPA) history模式调用微信jssdk 跳转后偶尔 “invalid signature“错误解决方案
  9. 【JAVA错误笔记】 - 【Could not open ServletContext resource [/WEB-INF/applicationContext.xml]解决方法】
  10. session跨域共享解决方案