function greetObject(who) {
if (!who) {
return null;
}
return { message: Hello, ${who}!
};
}
greetObject(‘Eric’); // => { message: ‘Hello, Eric!’ }
greetObject(); // => null
但是,在不带参数的情况下调用函数greetObject()
时,该函数返回null
。 返回null
是合理的,因为who
参数没有值。
检查null
值的好方法是使用严格相等运算符:
const missingObject = null;
const existingObject = { message: ‘Hello!’ };
missingObject === null; // => true
existingObject === null; // => false
missingObject === null
的结果为true
,因为missingObject
变量包含一个null
值。
如果变量包含非空值(例如对象),则表达式existObject === nul
l的计算结果为false
。
2.1 null 是虚值
null
与false
、0
、''
、undefined
、NaN
都是虚值。如果在条件语句中遇到虚值,那么 JS 将把虚值强制为false
。
Boolean(null); // => false
if (null) {
console.log(‘null is truthy’)
} else {
console.log(‘null is falsy’)
}
2.2 typeof null
typeof value
运算符确定值的类型。 例如,typeof 15是'number'
,typeof {prop:'Value'}
的计算结果是'object'
。
有趣的是,type null
的结果是什么
typeof null; // => ‘object’
为什么是'object'
,typoef null
为object
是早期 JS 实现中的一个错误。
要使用typeof
运算符检测null
值。 如前所述,使用严格等于运算符myVar === null
。
如果我们想使用typeof
运算符检查变量是否是对象,还需要排除null
值:
function isObject(object) {
return typeof object === ‘object’ && object !== null;
}
isObject({ prop: ‘Value’ }); // => true
isObject(15); // => false
isObject(null); // => false
null
经常会在我们认为该变量是对象的情况下意外出现。然后,如果从null
中提取属性,JS 会抛出一个错误。
再次使用greetObject()
函数,并尝试从返回的对象访问message
属性:
let who = ‘’;
greetObject(who).message;
// throws “TypeError: greetObject() is null”
因为who
变量是一个空字符串,所以该函数返回null
。 从null
访问message
属性时,将引发TypeError
错误。
可以通过使用带有空值合并的可选链接来处理null
:
let who = ‘’
greetObject(who)?.message ?? ‘Hello, Stranger!’
// => ‘Hello, Stranger!’
当无法构造对象时,我们通常的做法是返回null
,但是这种做法有缺点。在执行堆栈中出现null
时,刚必须进行检查。
尝试避免返回 null
的做法:
-
返回默认对象而不是
null
-
抛出错误而不是返回
null
回到开始返回greeting
对象的greetObject()
函数。缺少参数时,可以返回一个默认对象,而不是返回null
:
function greetObject(who) {
if (!who) {
who = ‘Stranger’;
}
return { message: Hello, ${who}!
};
}
greetObject(‘Eric’); // => { message: ‘Hello, Eric!’ }
greetObject(); // => { message: ‘Hello, Stranger!’ }
或者抛出一个错误:
function greetObject(who) {
if (!who) {
throw new Error(‘“who” argument is missing’);
}
return { message: Hello, ${who}!
};
}
greetObject(‘Eric’); // => { message: ‘Hello, Eric!’ }
greetObject(); // => throws an error
这两种做法可以避免使用 null
。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
文末
如果30岁以前,可以还不知道自己想去做什么的话,那30岁之后,真的觉得时间非常的宝贵,不能再浪费时间在一些碎片化的事情上,比如说看综艺,电视剧。一个人的黄金时间也就二,三十年,不能过得浑浑噩噩。所以花了基本上休息的时间,去不断的完善自己的知识体系,希望可以成为一个领域内的TOP。
同样是干到30岁,普通人写业务代码划水,榜样们深度学习拓宽视野晋升管理。
这也是为什么大家都说30岁是程序员的门槛,很多人迈不过去,其实各行各业都是这样都会有个坎,公司永远都缺的高级人才,只用这样才能在大风大浪过后,依然闪耀不被公司淘汰不被社会淘汰。
269页《前端大厂面试宝典》
包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
前端面试题汇总
JavaScript
含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
前端面试题汇总
JavaScript