falsy

ts utility-types ​​​​​​​ 源码解读 aliases-and-guards

时间秒杀一切 提交于 2020-09-25 10:58:58
https://github.com/piotrwitek/utility-types bigInt需要es2020的支持 Primitive / isPrimitive js原始类型已经判断一个对象的类似是不是原始类型 // js原始类型, 面试常考... export type Primitive = | string | number | bigint | boolean | symbol | null | undefined; function log(msg: Primitive[]) { console.log(...msg); } // log([{ a: 1 }]); // 正常输出log log([1, "1", "a", null, undefined, 12n]); export const isPrimitive = (val: unknown): val is Primitive => { if (val === null || val === undefined) { return true; } switch (typeof val) { case "string": case "number": case "bigint": case "boolean": case "symbol": { return true; } default: return

秋招快要开始了,前端笔试中的坑位-JS隐式转换问题

我的未来我决定 提交于 2020-08-10 21:11:44
我们在写笔试题的时候,经常碰到涉及隐式转换的题目,例如 "1" + 2 obj + 1 [] == ! [] [ null ] == false === 和 == = 叫做严格运算符,对象类型指向地址相同或原始类型( 数值、字符串、布尔值)值相同; 叫做相等运算符,类型不同会进行转化再比较,undefined、null相等,对象类型还是比较引用。 运算符将原始值和其包装对象视为相等,但 =运算符将它们视为不等。 所有obj.a null(相当于obj.a = null || obj.a ===undefined)。 相等运算符就是常常引起JS隐式转换的坑货,它也常常出现在我们的面试题中,不过我们在现实开发中,为了避免不必要的问题要求使用严格运算符,但是了解还是很有必要的。 想要了解JS隐式转换,就要先从三个知识点下手。 原始类型 原始类型(基本类型、基本数据类型、原始数据类型)是一种既非对象也无方法的数据。在 JavaScript 中,共有7种:string,number,bigint,boolean,null,undefined,symbol (ECMAScript 2016新增)。 falsy 值 (虚值) falsy 值 (虚值) 是在 Boolean 上下文中认定为 false 的值,在JavaScript只有 七个 falsy 值。 false false 关键字 0

1.2w字 | 初中级前端 JavaScript 自测清单

放肆的年华 提交于 2020-08-08 15:48:46
前言 最近与部门老大一起面试了许多前端求职者,其中 想换个学习氛围较好的人占多数 ,但良好的学习氛围也是需要一点点营造出来的🌺。 为此我们组建了我们团队内部的“ 现代 JavaScript 突击队 ”,第一期学习内容为 《现代 JavaScript 教程》 系列,帮助小组成员系统地进行学习巩固,并 让大家养成系统性学习和输出学习总结的学习方式 。 本文作为我输出的第一部分学习总结,希望作为一份自测清单,帮助大家巩固知识,温故知新。 这里也下面分享我们学习小组的“押金制度”和“押金记录表”🍀 接下来开始分享自测清单的内容。 一、Hello World! 1. 脚本引入方式 JavaScript 脚本引入方式有两种: <script> 标签插入脚本; <script> 标签 src 设置脚本地址。 2. script 标签属性 <script> 标签有以下常用属性: 2.1 src src :指定外部脚本的URI, 如果设置了 src 特性,script 标签内容将会被忽略; < script src = " example-url.js " > </ script > 2.2 type type :指定引用脚本的语言,属性值为 MIME 类型,包括 text/javascript , text/ecmascript , application/javascript , 和

详解 react diff

左心房为你撑大大i 提交于 2020-07-28 10:04:49
前言 react diff 是从 fiber 树的 Root 节点开始,从上往下一层一层的对新老节点进行 比较。期间组件的 key 以及 type 决定是否需要复用老的节点。节点的 index 最终决定了 dom 是否需要被移动。没有被复用的节点会被删除,也就不需要对其子树进行 diff,从而不需要跨层级的 diff。 附图: 链接: pan.baidu.com/s/1sb1XqteO… 密码:s364 实际的栗子 item 1 this Header will be deleted item 2 this is Footer 复制代码 上面为测试的 HTML 结构,其中 this Header will be deleted 元素是在点击 document 的时候会被删除或者添加,代码如下,除了以这种形式的增删,还可以以 map 或者其他方式的增删节点,通过原生 dom 的增删,不会通过 react 处理自然也不会被 diff: class APP extends React.Component{ constructor(props){ super(props) this.state = { showHeader: false } } clickHandler (){ this.setState({ showHeader: !this.state.showHeader }) }

检查object是否是jQuery对象

大兔子大兔子 提交于 2020-01-07 01:58:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 有没有快速检查对象是jQuery对象还是本机JavaScript对象的方法? 例: var o = {}; var e = $('#element'); function doStuff(o) { if (o.selector) { console.log('object is jQuery'); } } doStuff(o); doStuff(e); 显然,上面的代码有效,但不安全。 您可以将选择键添加到 o 对象并获得相同的结果。 有没有更好的方法来确保对象实际上是一个jQuery对象? 符合的东西 (typeof obj == 'jquery') #1楼 return el instanceof jQuery ? el.size() > 0 : (el && el.tagName); #2楼 您可以使用 instanceof 运算符: obj instanceof jQuery 说明 : jQuery 函数(又名 $ )是作为 构造函数实现的 。 使用 new 前缀调用构造函数。 当你调用 $(foo) ,内部jQuery会将其转换为 new jQuery(foo) 1 。 JavaScript继续在构造函数内初始化 this 以指向 jQuery 的新实例,将其属性设置为 jQuery