宏任务和微任务——三目算符与加号优先级——原生的js如何禁用button——0xff ^ 33 的结果是——in的用法——正则匹配网址

请问以下JS代码的输出顺序是?

let date = new Date()
setTimeout(() => {
    console.log('1')
}, 2000)
setTimeout('console.log(2)',1000);
setTimeout(function() {
  console.log('3')
}, 1500);
while((new Date() - date) < 3000) {}
//3秒以后同时输出2 3 1

需要明确一点的是setTimeout可以将字符串当成代码执行,类比eval函数。
While所在是微任务,所以前3秒后在执行while函数,setTimeout函数虽然在各自对应时间后插入了队列,但是由于属于宏任务所以暂时还没有执行,直到while微任务完成,才按顺序输出。

执行以下程序,输出结果为?

var a = 4 >= 6 || true && 1 || false;
console.log(a);
//1

赋值语句右侧的表达式含有关系运算符、逻辑运算符,其运算符的优先级是:关系运算符>逻辑运算符(先&&后||)。
因此,先执行关系运算:4 >= 6,返回结果为false,再执行逻辑运算的&&:true && 1,返回结果为1,最后执行逻辑运算的||: false || 1 || false,false || 1的结果为1,1 || false的结果也为1,所以变量a的值为1

代码执行后, arr 的值是?

var arr=[{a:1},{}];
arr.forEach(function(item,idx){
    item.b=idx;
});
//[{a:1,b:0},{b:1}]

三目算符与加号优先级

假设val已经声明,可定义为任何值。则下面js代码有可能输出的结果

console.log('Value is ' + (val != '0') ? 'define' : 'undefine');

加号优先级高于 三目运算。低于括号。 所以括号中无论真假 加上前边的字符串都为 TRUE 三目运算为TRUE是 输出 define

下列for循环输出为?

var person={fname:"John",lname:"Doe",age:25};
var txt="";
for (x in person)
{
  txt=txt + person[x];
}
alert(txt);
//JohnDoe25

页面有一个按钮button id为button1,通过原生的js如何禁用?

document.getElementById(“button1”).setAttribute(“disabled”,true);

document.getElementById(“button1”).disabled=true;

这段代码运行后的输出是?

(function() {
    var x=foo();
    var foo=function foo() {
        return "foobar"
    };
    return x;
})();
//undefined

函数执行顺序:
①var x; //变量声明提前
②var foo; //变量声明提前
③x=foo(); //给x赋值,会报错,因为foo变量目前是undefined,不是函数类型
④foo=function foo() {return “foobar”;}; //给foo赋值 foo变量“被提前”了,但是他的赋值(也就是函数)并没有被提前,从这一点上来说,和前面我们所讲的变量“被提前”是完全一致的,并且,由于“被提前”的变量的默认值是 undefined。
函数声明可以被提前,但函数表达式不能被提前

0xff ^ 33 的结果是:

0xff ^ 33 的结果是:

首先0xff表示16进制的ff, 即16*15+16 = 255
^: 表示的是异或运算符
33就是十进制的33 ,
现在将它们两个2进制化表达就是:
0xff ----> 255 ----> 1111 1111
33 ----> 33 ----> 0010 0001
这两个进行异或运算后是
1101 1110 (二进制)
二进制的1101 1110 转换为10进制就是:128+64+0+16+8+4+2+0 = 222

请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?

1 in Object(1.0).constructor;
Number[1] = 123;
1 in Object(1.0).constructor;

MDN 上对in运算符的介绍:如果指定的属性在指定的对象或其原型链中,则in 运算符返回true。

  • constructor 是构造函数属性。它是谁的属性?它是原型属性 prototype 所指向的那个对象的属性。
  • Object(1.0).constructor 的原型是 Number 对象。
  • Number 对象本身可作为构造函数,所以 Object(1.0).constructor 就是 Number 对象本身。

以下哪一项正则能正确的匹配网址: http://www.bilibili.com/video/av21061574

A:/^(https?:\/\/)?([a-zA-Z\d]+).bilibili.com\/?video\/av(\D{1,8})\/?$/
B:/^(http:\/\/)?(\w+)\.bilibili\.com\/?video\/av(\d{1,8})\/?$/
C:/^(https?:\/\/)?(\w+)\.bilibili\.com\/?\w*$/
D:/^(http:\/\/)?([a-zA-Z\d]+).bilibili.com\/?video\/av\w*\/+$/
首先,^表示匹配输入的开始,$表示匹配输入的结束
每个选项从前向后看,http都能够严格匹配
?表示匹配某元素0次或1次,这里四个选项都没有问题,能够匹配0次或1次字符s
接下来:严格匹配,\/\/严格匹配两个//
接着往下看,[]表示字符集合,它用在正则表达式中表示匹配集合中的任一字符
A D 选项中的 [a-zA-Z\d] 表示匹配一个小写字母 或者 大写字母 或者 数字
B C 选项中的 \w 表示匹配字母数字或下划线(注意这里比A D中能多匹配下划线类型)
+表示匹配某元素1次或多次,到这里四个选项都能够完美匹配字符www
.可以匹配除了换行符\n \r外的任何字符
接下来我们看选项A,bilibili com video av都严格匹配,而 \D 表示匹配一个非数字字符而非数字字符,av后的数字是无法匹配成功的,A错误
B选项,\d匹配数字,{m,n}表示最少匹配m次,最多匹配n次,\/?能匹配末尾的0个或1/字符,B正确
C选项,*表示匹配某元素0次或多次,但 \w 并不能匹配字符 /C错误
D选项,前面都对,错在最后的\/+至少要匹配一个/,而原字符串最后并没有/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢*牛牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值