java script面试题2

1. for in、Object.keys 和 Object.getOwnPropertyNames 对属性遍历有什么区别?

for in会遍历自身原型链上的可枚举属性
Object.keys会将对象自身的可枚举属性key输出
会将自身所有的属性的key输出

ECMAScript 将对象的属性分为两种数据属性访问器属性

image

for in

image

Object.keys

image

Object.getOwnPropertyNames

image

2.iframe 跨域通信和不跨域通信

不跨域通信

image
image
  • 主页面要是想要调取子页面的showalert方法
myIframe.window.showalert();

  • 子页面要掉主页面的fullscreen方法
window.parent.fullScreens();

  • js在iframe子页面获取父页面元素
window.parent.document.getElementById("元素id");

  • js在父页面获取 iframe 子页面元素代码
window.frames["iframe_ID"].document.getElementById("元素id");

跨域通信

使用postMessage(官方用法)

  • 子页面
window.parent.postMessage("hello", "http://127.0.0.1:8089");

  • 父页面接收
window.addEventListener("message", function(event) {
  alert(123);24.如何判断一个对象是否为数组
第一种方法:使用 instanceof 操作符。第二种方法:使用 ECMAScript 5 新增的 Array.isArray()方法。第三种方法:使用使用 Object.prototype 上的原生 toString()方法判断。
});

3.H5 与 Native 如何交互

jsBridge

4.如何判断一个对象是否为数组

  • 使用instanceof操作符
  • 使用ES5新增的Array.isArray()方法
  • 使用使用Object.prototype上的原生toString()方法判断

4. 什么是面向对象?

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为

面向对象和面向过程的异同

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用

面向对象是把构成问题事务分解成各个对象建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为

5. 对松散类型的理解

JavaScript中的变量松散类型

所谓松散类型就是指当一个变量申明出来就可以保存任意类型的值,就是不像 SQL一样申明某个键值为int就只能保存整型数值,申明varchar只能保存字符串;一个变量所保存值的类型也可以改变,这在JavaScript中是完全有效的,只是不推荐;相比较于将变量理解为"盒子",《JavaScript编程精解中提到应该将变量理解为"触手",它不保存值,而是抓取值。这一点在当变量保存引用类型值时更加明显。JavaScript中变量可能包含两种不同的数据类型的值:基本类型引用类型基本类型是指简单的数据段,而引用类型指那些可能包含多个值的对象

6. JS 单线程还是多线程,如何显示异步操作

JS本身是单线程的,他是依靠浏览器完成的异步操作

  1. 主线程执行js中所有的代码
  2. 主线程在执行过程中发现了需要异步的任务任务后扔给浏览器(浏览器创建多个线程执行),并在callback queque中创建对应的回调函数(回调函数是一个对象,包含该函数是否执行完毕等)
  3. 主线程已经执行完毕所有同步代码
    开始监听callback queque一旦浏览器中某个线程任务完成将会改变回调函数的状态;主线程查看到某个函数的状态为已完成,就会执行该函数。

7. JavaScript 数组的函数 map/forEach/reduce/filter

image
image

8. JS块级作用域,变量提升

块级作用域

JS作用域有:全局作用域,函数作用域,没有块作用域的概念;

ES6新增块级作用域
块作用域由{}包括,if语句和for语句里面的{}也属于块作用域

变量提升

如果变量声明在函数里面,则将变量声明提升函数开头
如果变量声明是一个全局变量,则将变量声明提升到全局作用域的开头

image
image

9. var、let、const 的区别

  • var定义的变量没有块的概念,可以跨块访问, 不能跨函数访问。
  • let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
  • const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改
  • 同一个变量只能使用一种方式声明,不然会报错

10. null/undefined 的区别

null: Null 类型,代表"空值",代表一个空对象指针,使用typeof运算得到 "object",是一个特殊的对象值

undefined: Undefined类型,当一个声明了一个变量未初始化时,得到的就是 undefined

11. 重排与重绘的区别,什么情况下会触发?

简述重排的概念

浏览器下载完页面中的所有组件(HTML、JavaScript、CSS、图片)之后会解析生成两个内部数据结构(DOM 树和渲染树),DOM 树表示页面结构渲染树表示 DOM节点如何显示;
重排DOM 元素几何属性变化,DOM 树结构变化,渲染树需要重新计算

简述重绘的概念

重绘是一个元素外观的改变所触发的浏览器行为,例如改变visibilityoutline背景色等属性;浏览器会根据元素的新属性重新绘制,使元素呈现新的外观;由于浏览器的流布局,对渲染树的计算通常只需要遍历一次就可以完成

简述重绘和重排的关系

重绘不会引起重排,但重排一定会引起重绘,一个元素的重排通常会带来一系列的反应,甚至触发整个文档重排重绘性能代价是高昂的

什么情况下会触发重排?

页面渲染初始化时;(这个无法避免)
浏览器窗口改变尺寸;
元素尺寸改变时;
元素位置改变时;
元素内容改变时;
添加删除可见的DOM元素时。

12. 发布订阅设计模式

发布/订阅模式(Publish Subscribe Pattern)属于设计模式中的行为(Behavioral Patterns)

13. jsonp 优缺点?

1). 优点

  1. jsonp不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制,jsonp可以跨越同源策略;
  1. jsonp兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequestActiveX的支持;
  1. 请求完毕后可以通过调用callback的方式回传结果;将回调方法的权限给了调用方;这个就相当于将controller层view层终于分开了;如果有两个页面需要渲染同一份数据,你们只需要有不同的渲染逻辑就可以了,逻辑都可以使用同 一个jsonp服务。

2). 缺点

  1. jsonp只支持GET请求而不支持POST等其它类型的HTTP 请求
  1. jsonp只支持跨域 HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题
  1. jsonp调用失败的时候不会返回各种HTTP状态码
  1. 安全性。万一假如提供jsonp的服务存在页面注入漏洞,即它返回的javascript的内容是被人控制的;那么所有调用这个jsonp的网站都会存在漏洞。于是无法把危险控制在一个域名下,所以在使用jsonp的时候必须要保证使用的jsonp服务必须是安全可信

14. 兼容各种浏览器版本的事件绑定

image

15. typescript 遇到过什么坑

main.js 报错: (Cannot find module './App.vue'.)
原因: typescript不能识别.vue文件
解决办法: 引入vuetypescript declare

16. Ajax 是什么?如何创建一个 Ajax?

Ajax全称是asychronous javascript and xml,可以说是已有技术的组合,主要用来实现客户端服务器端异步交互,实现页面的局部刷新

基本步骤: 创建对象、建立连接、发送数据、接收数据

image

17. 同步和异步的区别?

同步:阻塞的

浏览器服务器请求数据,服务器比较忙,浏览器一直等着(页面白屏),直到服务器返回数据浏览器才能显示页面

异步:非阻塞的

浏览器服务器请求数据,服务器比较忙,浏览器如常显示页面,服务器返回数据的时候通知浏览器一声,浏览器把返回的数据渲染到页面,局部更新

18. 如何解决跨域问题?

  • jsonp,允许script加载第三方资源
  • 反向代理(nginx 服务内部配置 Access-Control-Allow-Origin *)
  • cors前后端协作设置请求头部,Access-Control-Allow-Origin等头部信息
  • iframe嵌套通讯,postmessage

19. 页面编码和被请求的资源编码如果不一致如何处理?

get请求中的中文需要encodeURIComponent编码处理,post 请求不需要进行编码

20. 创建 ajax 过程

  • 创建XMLHttpRequest对象,也就是创建一个异步调用对象
  • 创建一个新的HTTP 请求,并指定HTTP请求的方法URL验证信息
  • 设置响应HTTP请求状态变化的函数
  • 发送HTTP请求
  • 获取异步调用返回的数据
  • 使用JavaScriptDOM实现局部刷新
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,582评论 0 7
  • 面试题一:https://github.com/jimuyouyou/node-interview-questio...
    R_X阅读 1,623评论 0 5
  • PNG 有PNG8和truecolor PNG PNG8类似GIF颜色上限为256,文件小,支持alpha透明度,...
    hudaren阅读 1,521评论 0 0
  • 本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在网上收集的答案。马上就...
    菲菲菲菲妞阅读 918评论 0 3
  • 五十三:请解释 JavaScript 中 this 是如何工作的。1.方法调用模式当一个函数被保存为一个对象的属性...
    Arno_z阅读 579评论 0 2