每天推各种框架和库,看起来挺累的。..今天放松一下,做几道基本的JavaScript题来找回自信!问题1-原型函数Animal(){this.type="animal"}functionDog(){this.name="dog"}Dog.prototype=newAnimal()varPavlovPet=newDog();console.log(PavlovPet.__proto__===Dog.prototype)console.log(Dog.prototype.__proto__===Animal.prototype)console.log打印出来的值是多少?问题2-小心“排序”vararr=[5,22,14,9];console.log(arr.sort());console.log打印出来的值是多少?问题3-异步循环for(leti=0;i<3;i++){constlog=()=>{console.log(i)}setTimeout(log,100)}console.log打印的值是?问题4—数字是什么?constlength=4constnumbers=[]for(vari=0;i"Helloworld"exportconstname="c"//index.jsimport*asdatafrom"./module"console.log(data)console.log打印出来的值是多少?问题10-对象做keyconsta={};constb={key:"b"};constc={key:"c"};[b]=123;[c]=456;安慰。log(a[b]);打印的值是多少?控制台日志?答案——问题1记住原型的基础,这道题你不会出错:所有对象都有[[prototype]]属性(通过_proto_访问),它对应于对象的原型;所有的函数对象都有prototype属性,prototype属性的值会赋给函数创建的对象的_proto_属性答案是:truetrue答案-问题2抱歉,答案不是[5,9,14,22].如果没有传递排序函数,排序函数会将每个元素转换为字符串,然后根据它们的UTF-16值对其进行排序。答案是:[14,22,5,9]答案-问题3我会回答这个问题,因为:定时器是异步执行的,浏览器会优先执行同步任务,遇到定时器会暂时存储在一个宏任务队列,只有当前宏任务队列中的所有任务都执行完,队列中的任务才会被执行。这个时候循环已经执行完了,i已经是3了。所以答案是:012,不是吗?为什么答案不是3、3、3?因为循环中的i是用let声明的,而不是var!let声明的变量具有块级作用域。即用letinforlooporif定义的变量,外部是无法访问的。for(leti...)形式的循环在每次迭代中为i创建一个新变量,并使用上一次迭代中同名变量的值对其进行初始化,因此上述代码实际上等同于:(leti=0){constlog=()=>{console.log(i)}setTimeout(log,100)}for(leti=1){constlog=()=>{console.log(i)}setTimeout(log,100)}for(leti=2){constlog=()=>{console.log(i)}setTimeout(log,100)}答案——第四题要仔细看,看小有没有;在方括号和大括号之间?答案是:[5]答案——第5题将数组的长度赋值为0,相当于删除数组中的所有元素。答案是:undefinedanswer-第6题第一个输出:globalvara第二个输出:输出函数中声明的vara变量被提升,还没有被赋值。第三次输出:a在输出函数的局部范围内已经赋值第四次输出:全局变量a没有改变答案是:1undefined21答案-第7题设a是局部变量。typeofa检查未声明的变量。b是全局变量,在foo函数中赋值。答案是:undefinednumber答案——第8题+运算符首先尝试将boolean类型转换为number类型,true转换为1,false转换为0。字符串'ConardLi'为真值,所以!'ConardLi'是假的。答案是:1错答案——第9题考查你对ESModule的理解。答案是:{default:functiondefault(),name:"c"}答案-问题10对象可以作为对象的key吗?当然不是,两次赋值其实是:a["Objectobject"]=123;a["对象对象"]=456;答案是:怎么样456,你找到自信了吗?