资讯专栏INFORMATION COLUMN

别让undefined摧毁你的前端代码

jayce / 261人阅读

摘要:孕育是一个特殊的值,它代表没有。嗯,不是说真的没有,它就像小强一样无所不在,但你又抓不住它,因为它是没有。。。可以用代替,压缩插件就是这么做的有条件的看官请用,给每个都发通行证写尽量用,两个等于号的就忘了它吧

孕育

undefined是一个特殊的值,它代表没有。嗯,不是说真的没有,它就像小强一样无所不在,但你又抓不住它,因为它是没有。。。

卑微的出生
数组溢出
var arr = [1, 2, 3];

console.log(arr[4]); // undefined
初始变量
var a;

console.log(a); // undefined
未传实参
function callMe(name) {
  return name;
}

console.log(callMe()); // undefined
无返回值
function callMe(name) {
  // do nothing
}

console.log(callMe("原罪")); // undefined
虚构属性
var def = {hello: "world"};

console.log(def.hi); // undefined
偷梁换柱

堆内存和栈内存的千丝万缕

function doYouLikeMe(You) {
  delete You.amPower;

  return "no";
}

var I = {name: "原罪", amPower: "yes"};

console.log(I.amPower);        // "yes"
console.log(doYouLikeMe(I));   // "no"

console.log(I.amPower);        // undefined
偷上瘾了

亚当和夏娃偷吃禁果,犯了原罪

function whatAboutAdam(eve) {
  eve.pop();

  return "无罪释放";
}

var eve = ["夏", "娃", "的", "原", "罪"];

console.log(eve[4]);               // "罪"
console.log(whatAboutAdam(eve));   // "无罪释放"

console.log(eve[4]);               // undefined
类型推断
var a;

console.log(typeof a);              // "undefined"
console.log(typeof undefined);      // "undefined"
console.log(typeof notDefinedKey);  // "undefined"
残酷的竞争

队友,可以用 === 对比

// void后面加上任何值都会 全等于 undefined

void 0 === undefined       // true
void 1 === undefined       // true
void "原罪" === undefined   // true
void true === undefined    // true
void {} === undefined      // true

敌人,可以用 == 对比:

null ==  undefined // true

null === undefined // false

敌人的敌人,需要取反对比:

!false === !undefined // true
!"" === !undefined // true
!0 === !undefined // true

false == undefined // false
"" == undefined // false
0 == undefined // false
克隆者入侵

undefined不是保留字,es5之后,全局undefined无法被覆盖

undefined = 2;

console.log(undefined); // undefined

严格模式下,覆盖全局undefined将直接抛错

"use strict";
undefined = 2;

console.log(undefined); // throw new TypeError();

但局部undefined还可以被覆盖(包括严格模式)

var undefined = 2;

console.log(undefined); // 2
灭霸响指

覆盖undefined的值是危险动作,请勿模仿。

可以用 void 0 代替 undefined,压缩插件就是这么做的

有条件的看官请用typescript,给每个undefined都发通行证

写js尽量用 ===,两个等于号的就忘了它吧

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108057.html

相关文章

  • 别让任何人打乱你的节奏

    摘要:人生中的每一件事都取决于我们自己的时间,你身边有些朋友也许遥遥领先于你,有些朋友也许落后于你,但凡事都有它自己的节奏因此,无论当下如何,保持一颗平静的心,从容对待。愿你始终相信,一切都会准时到来的。不言而喻的是信心对完成任务的作用很大。 《别让任何人打乱你的生活节奏》完美人生 就是 18岁成人 22岁大学毕业,25岁工作稳定,30岁之前买房结婚生子,35岁之后人生轨迹就会定型…… 可是...

    fanux 评论0 收藏0
  • 做完自动化测试,但别让不会汇报毁了你...

    摘要:前端自动化测试百度搜索功能实战可以与结合生成测试报告。以网页版本的百度为例,百度首页呈现的功能新闻网页贴吧知道音乐图片视频地图等,我们以百度网页的搜索功能为例,使用结合自动化测试框架,完成一个搜索功能的测试。 ...

    HelKyle 评论0 收藏0
  • 深入理解JavaScript

    摘要:深入之继承的多种方式和优缺点深入系列第十五篇,讲解各种继承方式和优缺点。对于解释型语言例如来说,通过词法分析语法分析语法树,就可以开始解释执行了。 JavaScript深入之继承的多种方式和优缺点 JavaScript深入系列第十五篇,讲解JavaScript各种继承方式和优缺点。 写在前面 本文讲解JavaScript各种继承方式和优缺点。 但是注意: 这篇文章更像是笔记,哎,再让我...

    myeveryheart 评论0 收藏0

发表评论

0条评论

jayce

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<