简单测试-JavaScript到底学的好不好(初级)-简答

学完了初级阶段的JavaScript语法,即ES基本语法阶段,可以利用以下简答题测试一下自己知识掌握的程度,查漏补缺!学完了初级阶段的JavaScript语法,即ES基本语法阶段,可以利用以下简答题测试一下自己知识掌握的程度,查漏补缺!
1、以下代码的输出结果
  setTimeout(function(){console.log(4)},0);
  new Promise(function(resolve){
      console.log(1)
      for( var i=0 ; i<10000 ; i++ ){
          i==9999 && resolve()
      }
      console.log(2)
  }).then(function(){
      console.log(5)
  });
  console.log(3);
分析
//首先执行脚本的同步任务
//添加异步宏任务到异步队列
//打印1
//执行for循环,循环10000次后将promise的then函数添加到本轮异步微任务队列,但不执行
//打印2
//打印3
//执行本轮异步微任务,打印5
//执行下一轮宏任务,打印4
//最后结果 1,2,3,5,4
2、以下代码的输出结果
        function Foo() {
            getName = function() {
                console.log(1)
            }
            return this;
        }
        Foo.getName = function() {
            console.log(2)
        }
        Foo.prototype.getName = function() {
            console.log(3)
        }
        var getName = function() {
            console.log(4)
        }
        function getName() {
            console.log(5)
        }
(1)getName() 输出 ??
	首先变量提升var getName=undefined
	再函数提升Foo:函数堆地址,getName:赋值{console.log(5)}
	Foo.getName:为Foo添加成员
	Foo.prototype.getName为函数的原型添加成员getName,以后用Foo创建的对象的原型链上就有getName方法
	getName = function() {  console.log(4)}赋值
	//所以输出4
(2)Foo().getName() 输出 ??
	执行Foo函数,全局getName变为{console.log(1)},返回this-window
	再调用window.getName()
	//打印1
(3)new Foo.getName() 输出 ??
	根据优先级函数带参=成员访问,执行顺序从左到右,即new (Foo.getName)()
	//打印2
(4)new Foo().getName() 输出 ??
	即(new Foo()).getName()
	执行Foo函数,创建一个对象,调用这个对象的getName方法,没有查到,则在原型上找
	所以打印3
(5)new new Foo().getName() 输出 ??
new (( new Foo()).getName)()
	//创建对象,返回对象,在对象的原型对象上找到getName方法,
	所以打印3
3、使用至少2 种方法实现数组去重var num = [2,3,4,4,6,7,8,4,9,7]。
第一种:
var num=[2,3,4,4,6,7,8,4,9,7];
var newarr=Array.from(new Set(num));
console.log(newarr);
第二种:
var num=[2,3,4,4,6,7,8,4,9,7];
var newarr=[];
for(var i=0;i<num.length;i++){
	if(newarr.indexOf(num[i])==-1){
	newarr.push(num[i]);
}
}
console.log(newarr)
4、箭头函数与普通函数(function)区别是什么?
	首先箭头函数的写法比普通函数简单:(参数)=>{执行体}
	箭头函数的this是嵌套着这个箭头函数的函数的调用者
	箭头函数的arguments没有绑定,所以接收形参时可以用...直接接收
	箭头函数的call,bind方法都无法为它指定this
5、求一个字符串的字节长度?
假设:一个英文字符占用一个字节,一个中文字符占用两个字节假设:一个英文字符占用一个字节,一个中文字符占用两个字节
var reg1=/[a-z]/ig
var reg2=/[\u4E00-\u9FFF]/ig		//中文的字符范围
var str=”adfe中安尔碘”
var arr1=str.match(reg1)
var arr2=str.match(reg2)
console.log(arr1.length+arr2.length*2)
6、JS 的基本数据类型和引用数据类型?区别是?
	JS的基本数据类型:number,Boolean,undefined,null,string,symbol
	JS的引用数据类型:object,function,
	他们的区别是:基本数据类型直接存储的是值,直接存在栈中;而引用数据类型在栈中存储的是数据的地址,,该地址指向该数据的存储堆里面
7、new操作符具体干了什么?
	首先创建一个对象,该对象为构造函数的prototype属性,
	创建this,this指向这个对象,
	然后执行构造函数的函数体,为这个对象添加成员
8、某地区手机号默认为9位数(xxxxxxxxxx),第二位必须是6/8/9中的一个,手机号最前面可加0也可不加(0xxxxxxxxxx),请据此写出验证手机号是否有效的JS 代码。
var reg=/^[0]?[\d][689]\d{7}$/
var num="0282389048"
console.log(reg.test(num))

答案仅供参考,发现错误可评论指正

posted @   徐啊伟  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示