很久前面试时总结的,一直放在text里。现在也不太用的着了。曾经的面试血泪啊。
1.typeof()转为string,boolean,number,undefined,function,object是引用类型,其他都是基本类型
2.强制转换类型和隐士转换类型String(),Number(),Boolean()parseInt(),parseFloat()
(1).隐士转换类型1.字符串加数字,数字就会转成字符串。
(2).数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。
(3).乘,除,大于,小于跟减的转换也是一样。
3. split() join() 区别
4.数组.pop()在尾部删除,push()在尾部添加,unshift()在头部添加,shift(在头部删除)
5.?IE和标准下有哪些兼容性的写法
答案:
var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target
6.ajxa发送请求时,get,post,一个获取,一个发送,一个在URL后面一个在虚拟的载体上,一个有大小限制,且只能携带少量参数
7.call和apply的区别,都是改变this的指向,只不过携带参数的样式不一样,apply(this,[a,b,c,d])Object.call(this,obj1,obj2,obj3)
8. ajax请求时,如何解析json数据,通过json.parse
9.事件委托的原理就是,自己所触发的事件让父级代替执行
10.闭包,闭包就是调用函数内部变量的函数,使函数避免gc垃圾回收机制,过多用,容易导致内存泄漏,也是为了防止私有变量被全局污染
11.如何阻止事件冒泡,ie:阻止冒泡ev.cancelBubble = true;非IE ev.stopPropagation();
12.如何阻止默认事件,(1)return false;(2) ev.preventDefault();
13.创建,添加,查找,创建,
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入
getElementById() //通过元素Id,唯一性
14. 解释jsonp的原理,以及为什么不是真正的ajax,jsonp是通过动态创建script标签 回调函数,而ajax是无刷新状态下,请求数据
15.jquery中load和ready的区别document.onload 是在结构和样式,外部js以及图片加载完才执行js
window.onload();window是bom操作的核心
(
d
o
c
u
m
e
n
t
)
.
r
e
a
d
y
(
f
u
n
c
t
i
o
n
(
)
?
)
?
?
?
?
?
?
?
?
?
?
?
?
?
j
q
u
e
r
y
简
写
:
(document).ready(function(){?}) ? ? ? ? ? ? ? ? ? ? ? ? ?jquery简写:
(document).ready(function()?)?????????????jquery简写:(function(){ ?})
document.ready是dom树创建完成就执行的方法,原生种没有这个方法,jquery中有 KaTeX parse error: Undefined control sequence: \w at position 714: … reg=/^[a-zA-Z]\̲w̲{5,29}/;
24.js中的全局变量在当前页面有效,局部变量在函数调用时有用
25.null和undefined的区别?
null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
当声明的变量还未被初始化时,变量的默认值为undefined。 null用来表示尚未存在的对象
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
null表示"没有对象",即该处不应该有值。典型用法是:
(1)?作为函数的参数,表示该函数的参数不是对象。
(2)?作为对象原型链的终点。
26… new操作符具体干了什么呢?
创建了一个空对象,并且this引用该对象,而且继承了该对象原型,属性和方法被加入到 this 引用的对象中。
新创建的对象由 this 所引用,并且最后隐式的返回 this
27.js延迟加载的方式有哪些?
defer和axync,动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)按需异步载入js
28.Flash、Ajax各自的优缺点,在使用中如何取舍?
(1)Flash适合处理多媒体、矢量图形、访问机器;对CSS、处理文本上不足,不容易被搜索。
(2)ajax对CSS、文本支持很好,支持搜索;多媒体、矢量图形、机器访问不足。
29.type和typeof的区别,typeof可以判断数据类型,type可以名称类型如复选框
30. 写一个function,清除字符串前后的空格。(兼容所有浏览器)
String.prototype.trim= function(){
return this.replace(/^\s+/,"").replace(/\s+$/,"");
}.
32. javascript语言特性中,有很多方面和我们接触的其他编程语言不太一样,请举例
javascript语言实现继承机制的核心就是 1 (原型),而不是Java语言那样的类式继承。
33.34. Cookie在客户机上是如何存储的
Cookies就是服务器暂存放在你的电脑里的文本文件,好让服务器用来辨认你的计算机。
34. 如何获取javascript三个数中的最大值和最小值?
Math.max(a,b,c);//最大值Math.min(a,b,c)//最小值
35. javascript是面向对象的,怎么体现javascript的继承关系?
使用prototype原型来实现。
36…form中的input可以设置为readonly和disable,请问2者有什么区别?
readonly不可编辑,但可以选择和复制;值可以传递到后台
disabled不能编辑,不能复制,不能选择;值不可以传递到后台
37.数据类型
主要数据类型:string number bloolean
复合数据类型:function object
特殊数据类型:undefinde null
38.程序中捕获异常的方法
try{
}catch(e){
}finally{
39.?Ajax原理
(1)创建对象
var xhr = new XMLHttpRequest();
(2)打开请求
xhr.open(‘GET’, ‘example.txt’, true);
(3)发送请求
xhr.send(); 发送请求到服务器
(4)接收响应
xhr.onreadystatechange =function(){}
(1)当readystate值从一个值变为另一个值时,都会触发readystatechange事件。
(2)当readystate==4时,表示已经接收到全部响应数据。存有 XMLHttpRequest 的状态
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
(3)当status ==200时,404: 未找到页面,表示服务器成功返回页面和数据。
(4)如果(2)和(3)内容同时满足,则可以通过xhr.responseText,获得服务器返回的内容。
40.41. 解释什么是Json:
(1)JSON 是一种轻量级的数据交换格式。
(2)JSON 独立于语言和平台,JSON 解析器和 JSON 库支持许多不同的编程语言。
(3)JSON的语法表示三种类型值,简单值(字符串,数值,布尔值,null),数组,对象
41. js中的3种弹出式消息提醒(警告窗口,确认窗口,信息输入窗口)的命令式什么?
alert confirm prompt
42. 浏览器的滚动距离:
可视区域距离页面顶部的距离
scrollTop=document.documentElement.scrollTop||document.body.scrollTop
43. 节点的种类有几种,分别是什么?
(1)元素节点:nodeType ===1;
(2)文本节点:nodeType ===3;
(3)属性节点:nodeType ===2;
44. innerHTML和outerHTML的区别innerhtml outerhtml
innerHTML(元素内包含的内容)
outerHTML(自己以及元素内的内容)
45.49. 闭包的好处,但是容易导致内存泄漏
(1)希望一个变量长期驻扎在内存当中(不被垃圾回收机制回收)
(2)避免全局变量的污染
(3)私有成员的存在
(4)安全性提高
46.冒泡排序写法,两个for循环用法,然后由一个空值,赋值的方法,代替之前的,
47.不使用循环,创建一个长度为100的数组,并且每个元素的值等于它的小标。
new Array(100).fill(0).map((_, c) => c)
48,回调地狱最主要的就是因为功能逻辑代码嵌套的层次太多,导致可读性降低,维护困难,避免回调地狱的最重
要的方面是将功能移开,也就是多多进行代码封装,将你所要的属性和方法用function关键字包裹起来,而且还要
给它取一个有意义的名字,例如:页面上弹框,显示,隐藏,下拉等各个功能小模块,分别用有名函数给包裹起来,
少用匿名函数,以便可以重复的多次使用,这也是可以便于程序流程的理解。
49.在for循环中运行setTimeout的三种情况
(1) for(var i=0;i<10;i++){…这一种结果是.0123456789,因为要仔细看
setTimeout(console.log(i),0);
(2)for(var i=0;i<10;i++){…这种才是//连续的10个10因为在for循环中使用setTimeout涉及到了异步机制
setTimeout(function(){…JS是单线程环境,也就是说代码的执行是从上到下,依次执行。也就是同一个时间只能做一件事。
console.log(i); …console.log()在这时候等于是同步任务要随着for循环执行
},0);
(3)for(var i=0;i<10;i++){
setTimeout(“console.log(i)”,1000);//连续的10个10
}
50.同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,
某个异步任务可以执行了,该任务才会进入主线程执行。
1.map和foreach的区别
(1)forEach是ES5中操作数组的一种方法,主要功能是遍历数组。forEach方法中的functi
on回调有三个参数:第一个参数是遍历的数组内容,第二个参数是对应的数组索引,第三个参数是数组本身
forEach适合于你并不打算改变数据的时候,而只是想用数据做一些事情 – 比如存入数据库或则打印出来。
map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);
(2)如果你习惯使用函数是编程,那么肯定喜欢使用map()。因为forEach()会改变原始的数组的值,而map()会返回一个全新的数组,原本的数组不受到影响。
map()适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。这样的优点在于你可以使用复合(composition)(map(), filter(), reduce()
等组合使用)来玩出更多的花样。
能用forEach()做到的,map()同样可以。反过来也是如此。
map()会分配内存空间存储新数组并返回,forEach()不会返回数据。
forEach()允许callback更改原始数组的元素。map()返回新的数组。
forEach:用来遍历数组中的每一项;这个方法执行是没有返回值的,对原来数组也没有
影响;到底有什么区别呢?forEach()方法不会返回执行结果,而是undefined。也就是说,forEach()会修改原来的数组。而map()方法会得到一个新的数组并返回。
2.hash和history的区别
对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义。前端路由的核心,
就在于 —— 改变视图的同时不会向后端发出请求。
为了达到这一目的,浏览器当前提供了以下两种支持:为了构建SPA,vue引入了前端路由系统vue-router。
(1). hash模式(vue-router默认hash模式)
hash模式背后的原理是onhashchange事件。
window.οnhashchange=function(){
let hash=location.hash.slice(1);
document.body.style.color=hash;
}
由于hash发生变化的url都会被浏览器记录下来,使得浏览器的前进后退都可以使用了,尽管浏览器没有亲求服务器,但是
页面状态和url关联起来。后来人们称其为前端路由,成为单页应用标配。
比如http://www.abc.com/#/index,hash值为#/index。hash模式的特点在于hash出现在url中,但是不会被包括在HTTP请求中,对后端没有影响,不会重新加载页面。
(2).history模式利用了HTML5 History Interface中新增的pushState()和replaceState()方法。MDN相关介绍(需要特定浏览器支持)。这两个方法
应用于浏览器的历史记录栈,提供了对历史记录进行修改的功能。只是当他们进行修改时,虽然修改了url,但浏览器不会立即向后端发送请求。
当使用history模式时,url就像正常的url,例如http://abc.com/user/id相比hash模式更加好看。特别注意,history模式需要后台配置支持。如果后台没有正确配置,访问时会返回404。
通过history api,我们丢弃了丑陋的#,但是有一个缺点,当刷新时,如果服务器中没有相应的相应或者资源,会分分钟刷出一个404来(刷新需要请求服务器)
。所以history模式不怕前进,不怕后退,就怕刷新。
(3)区别呀 hash模式下,仅hash符号之前的url会被包含在请求中,后端如果没有做到对路由的全覆盖,也不会返回404错误。
history模式下,前端的url必须和实际向后端发起请求的url一致,如http://abc.com/user/id,后端如果没有对user/id的路由处理,将返回404错误。
history模式官方文档
区别 hash history
url显示 有#,很Low 无#,好看
回车刷新 可以加载到hash值对应页面 一般就是404掉了
支持版本 支持低版本浏览器和IE浏览器 HTML5新推出的API
3.inport和reqire
(1)node编程中最重要的思想就是模块化,import和require都是被模块化所使用。
遵循规范
–require 是 AMD规范引入方式
–import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法
调用时间
–require是运行时调用,所以require理论上可以运用在代码的任何地方
–import是编译时调用,所以必须放在文件开头