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)); 
posted @ 2021-11-10 14:00  Gurad-your-heart  阅读(93)  评论(0)    收藏  举报