第十六问 你知道||与&&的返回值规则吗?
- 短路效应:
&&
和||
都会发生短路
-
&&
只有在两个操作数都为true
时,条件判断的结果才为true
,如果操作数一为false
,不会判断操作数二。 -
||
两个操作数只要有一个为true
,条件判断的结果就为true
,因此操作数一为true
时,不会判断操作数二。
- 返回值规则
-
||
和&&
首先会对操作数一执行条件判断,如果不是布尔值就先强制转换为布尔类型,然后再执行条件判断。 -
对于
||
来说,如果条件判断结果为true
就返回第一个操作数的值,如果为false
就返回第二个操作数的值。 -
&&
则相反,如果条件判断结果为true
就返回第二个操作数的值,如果为false
就返回第一个操作数的值。 -
||
和&&
返回它们其中一个操作数的值,而非条件判断的结果
(2<3)||(3<2)
返回值是多少?
第十七问 1 + - + + + - + 1
结果是多少?
+/-
号在 JavaScript
通常有三种用途:
-
普通加减法: 二元运算符
-
++/--
: 自增自减,一元运算符 -
+/-
: 正负,一元运算符
上面表达式中没有涉及自增与自减的情况,一元运算符的优先级大于二元运算符,上述表达式执行顺序为:
1 + (- (+ (+ (+ (- (+ 1)))))) ----> 1 + 1 = 2
第十八问 你会用位运算符吗?
- 判断奇偶数
二进制的奇数最低位是1,偶数最低位是0,可以通过& 1运算后可以判断奇偶。
num & 1 === 1 // num 为奇数
num & 1 === 0 // num 为偶数
- 交换a,b的值
可以采用异或来实现两个变量值的交换
let a = 1
let b = 2
a ^= b
b ^= a
a ^= b
console.log(a) // 2
console.log(b) // 1
- 取整
~~num
第十九问 你能准确的做出自增与自减的题目吗?
请回答:y
的值为?
var x = 1;
var y = x + ++x + 3 * (x = ++x + x + x++ + 1)
- x++ + 3;
console.log(y);
咱们来解剖一下这个长的要死的表达式:
第一个x值为1
第二个自增先加后用,x = 2
将 ++x + x + x++ + 1 的运算结果赋值给x
++x 先加后用,x = 3
x = 3
x++ 先用后加,x = 3
++x + x + x++ + 1 = 3 + 3 + 3 + 1 = 10
x++的后加,x = 4
将表达式的值赋给x,x由4变为10
x++ 先用后加,x = 10
此时所有的变量都已经求出
y = 1 + 2 + 3*10 + 10 + 3 = 46
x++,x最终值为11
第二十问 你知道new
运算符的有两种优先级吗?
MDN
对 new
操作符的描述中,语法是:
new constructor[([arguments])]
([arguments])
意味着可以缺省,会存在 new constructor(...args)
和 new constructor
两种模式,并且前者的优先级高于后者。更详细的优先级见下图:
这个知识点非常重要,只有区分开了 new
带参列表和不带参列表,才能准确并且透彻的理解下面这道面试题。
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) };
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
第二十一问:你知道toString()
的妙用吗?
- 可以转换数字的进制(
2-36
)
// 参数为要转换的进制
var a = 10;
a.toString(2) // “1010”
a.toString(8) // “12”
a.toString(16) // “a”
- 可以生成随机验证码
利用 toString
的进制转换,可生成随机验证码
Math.random().toString(36).substring(3,7) //生成四位数的随机验证码
- 判断数据类型
toString.call(()=>{}) // [object Function]
toString.call({}) // [object Object]
toString.call([]) // [object Array]
toString.call(‘’) // [object String]
toString.call(22) // [object Number]
toString.call(undefined) // [object undefined]
toString.call(null) // [object null]
toString.call(new Date) // [object Date]
toString.call(Math) // [object Math]
toString.call(window) // [object Window]
第二十二问:字符串是原始值,那为什么可以调用字符串方法那?
原始值是没有属性也没有方法的,那为什么字符串可以调用方法那?
JavaScript
为了便于基本类型操作,提供了三个特殊的引用类型(包装类),即 Number,String,Boolean
,它们的 [[PrimitiveValue]]
属性存储它们的本身值。
光说这些有可能有些难理解,咱们来举个例子:
var str = ‘zcxiaobao’
str2 = str.toUpperCase()
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!
可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。
部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-XtTAYuoT-1711811746041)]
最后
今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!
可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。