dg
JS面试题03
不支持冒泡:
mouseenter mouseleave blur focus load unload resize
按照CommonJs规范,在任何模块代码的作用域下内置了以下变量
module require exports
浏览器不兼容cjs 是缺少 node,js module exports require global
下面的JS代码中,哪一个无法达到预期效果
<div class="msg-box">{msg}</div> class是关键字 这里要用到className
以下代码在浏览器中执行,输出日志结果
var obj={};
obj.log=console.log;
obj.log.call(console,this); //window
el是一个id="id1"的div元素,执行失败的
el.tagName='p' tagName()是用来获取当前标签名的方法,而非设置标签
以下代码运行的结果
function foo(){
console.log('first');
setTimeout(() => {
console.log('second');
}, 5);
}
for(var i=0;i<43999999;i++){
foo();
}
首先全部输出first,然后全部输出second
cookie以及loclStorage都会伴随着http请求发送到服务器(x)
cookie会被HTTP请求携带 localStorage不会
7.25四舍五入为最接近的整数
Math.round(7.25)
标准JS中,AJAX异步执行调用基于什么机制才能实现
Event callback
js是单线程,浏览器实现了异步的操作,整个JS程序是事件驱动的,每个事件都会绑定相应的回调函数
匹配以下16进制颜色值 正则表达式
#ffbbad
#Fc01DF
#FFF
#ffE /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g
f能取到a,但取不到b
var F=function(){};
Object.prototype.a=function(){};
Function.prototype.b=function(){};
var f=new F();
f instanceof Object //true
f instanceof Function //false
new创建的f只是对象,所以只能继承Object.prototype
F是多继承,可以通过F.a F.b拿到a,b的值,
(()=>{}).length 获取方法形参个数,形参为0
1&2 1=0001 2=0010 按位与运算,同为1才为1,否则返回0
+[] 隐式类型转换,因为[]是对象,所以 toPrimitive->valueOf->toString为‘’,结果就是+''===0
[1,2,-3].reduce((a,b)=>a-b,0) reduce对数组中每一个元素执行一个reducer函数(升序执行) 将其结果汇总为单个返回值,a为累计回调的返回值,bw为数组里的每一组元素
传入初始值0->0-(1)->(1)-2->(-3)-(-3)->0
不是由鼠标触发的事件
Keydown 事件会在用户按下一个键盘按键时发生,由键盘触发
由鼠标触发的由 click contextmenu禁止使用鼠标右键 mouseout
如何准确的判断一个JS对象
Object.prototype.toString.call(arr)==='[object Array]'
JS中 表达式 "2"+3+4的值为 "234"
Angular中关于服务的说法
避免全局对象污染 能注入到其它组件 避免代码分散到各处
array的结果是
let array=[,1,,2,,3];
array=array.map((i)=>++i)
console.log(array);
// [,2,,3,,4]
输出结果
var i=0;
while(i<40){
if(i<30)
continue;
Document.write('######');
i++;
} 一行也没有
null、undefined、0都会返回false JavaScript是动态语言
给网页添加JavaScript的方式由
使用script标签,将JavaScript代码写道script中
添加外部JavaScript文件 使用行内javas
关于AJAX与flash的优缺点正确的是
Ajax的优势在意于开放性,易用性及易于开发
Flash的优势在于多媒体处理,可以更容易的调用浏览器以外的外部资源
Ajax最主要的批评就是它可能破坏浏览器的后退功能
flash文件经常很大,用户第一次使用的时候需要忍耐较长的等待时间
proto_查找是不是有这个属性
当我们调用 person.proto 实例会先查看自己是否有这个属性 没有的话通过proto属性查看shop有没有这个原型 shop的原型成为了supermarket的实例 再次往上寻找 supermarket的原型有product这个属性 就可以返回结果了
闭包可以让变量保存在内存当中
正则表达式
\d 匹配的是数字 等价于[0-9]
\D 匹配一个非数字字符 等价于[^0-9]
\f 匹配一个换页符 等价于\x0c 和 \cL
\n 匹配一个换行符 等价于\x0a \cJ
\w 匹配字母、下划线、数字 等价于[A-Za-z0-9_]
\W 匹配非字母、数字、下划线等价于[A-ZA-Z0-9_]
\v 匹配一个垂直制表符 等价于 \x0b \cK
\S 匹配任何非空白字符 等价于 [^\f\n\r\t\v]
\s 匹配任何空白字符 包括空格、制表符、换页符等 等价于[\f\b\r\t\v]
\r 匹配一个回车符 等价于
假设output是一个函数 用来输出
output(typeof (function() {output("HELLO world!")})()); hello world undefined
获取原生JS的父节点是
element.parentNode
正则表达式满足 regexp.test('abc')===true
/^abc$/ /[ab]{2}[^defgh/ /[defgh]*/
对象的_proto_指向自己构造函数的prototype
Object.prototype._proto_===null 说明原型链到Object.prototype终止
表达式Function.prototype._proto_.proto_===null的运行结果为true
为什么要用立即执行函数表达式IIFE (Immediately-invoked Function Expression)
IIFE有两个比较经典的使用场景,一是类似于在循环中的定时输出数据项,二是类似于Jquery/node 的插件和模块开发
for(var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);}
//结果为5个 5 因为setTimeout为异步执行的,1000毫秒后的向任务队列里添加一个任务,只有主线上的全部执行完才执行任务队列里的任务,所以当主线程for循环执行完之后i的值5,这个时候再去任务中执行任务,i全部为5
//每次for循环的时候 setTimeout都会执行,但是里面的的function则不会执行被放入任务队列,因此放了5次,for循环的5次执行完之后不到1000毫秒, 如果把这个let 那么输入结果的0,1,2,3,4 let i的是区块变量,每个i只能存活到大括号结束,
for(var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);}
var myObject = {
foo: "bar",
func: function() {
var self = this;
console.log("outer func: this.foo = " + this.foo); //bar
console.log("outer func: self.foo = " + self.foo); //bar
(function() {
//函数作用域 IIFE有自己的独立作用域,并且它能访问到外部作用域的self this在可访问到的作用域内是undefined
console.log("inner func: this.foo = " + this.foo);// 指向window undefined
console.log("inner func: self.foo = " + self.foo);// bar 闭包
}());
}};
myObject.func();
什么是NAN,它的类型是什么?怎么测试一个值是否等于NAN?
Not a number的缩写,JS的一种特殊数值,类型是number ,可以通过isNaN 来判断一个值是否是NaN
js中的number 类型就是浮点型, 双精度浮点数的小数,
一是先升幂再降幂
function add(num1, num2){
let r1, r2, m;
r1 = (''+num1).split('.')[1].length;
r2 = (''+num2).split('.')[1].length;
m = Math.pow(10,Math.max(r1,r2));
return (num1 * m + num2 * m) / m;}console.log(add(0.1,0.2));

浙公网安备 33010602011771号