宏任务和微任务——三目算符与加号优先级——原生的js如何禁用button——0xff ^ 33 的结果是——in的用法——正则匹配网址
Posted 勇敢*牛牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宏任务和微任务——三目算符与加号优先级——原生的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(\\D1,8)\\/?$/
B:/^(http:\\/\\/)?(\\w+)\\.bilibili\\.com\\/?video\\/av(\\d1,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选项,前面都对,错在最后的\\/+至少要匹配一个/,而原字符串最后并没有/
以上是关于宏任务和微任务——三目算符与加号优先级——原生的js如何禁用button——0xff ^ 33 的结果是——in的用法——正则匹配网址的主要内容,如果未能解决你的问题,请参考以下文章
详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务