它更倾向于执行数字减法,而不考虑操作数的类型。当操作数不是数字类型时,JavaScript 会执行隐式转换,将它们转换为数字。...词法作用域是由你在源代码中放置代码的位置在编译时决定的。 当这段代码运行时,foo 位于 bar 函数内部。这种安排改变了作用域的动态。...回到我们最初的代码片段: const obj = { valueOf: () => 42, toString: () => 27 }; console.log(obj + ''); 当我们运行这段代码时...为什么呢? 在JavaScript中,对象键总是字符串(或 symbols),或者通过隐式强制转换自动转换为字符串。...那么,你认为输出会是什么呢? 这个问题相当复杂。那么,你认为输出结果会是什么呢?让我们一步一步地来评估。
面试遇到这个问题,应该怎么回答呢?...比如聊一聊二进制,比如实际开发中,遇到精度的问题,你是怎么解决的,你有什么好办法。...聊完这个,你可以牵扯出最大安全数,比如JavaScript的最大安全整数是多少,超出这个范围的话,怎么解决精度问题呢?...ES规范中新提出的BigInt解决了什么问题呢,你又发现了BigInt中哪些坑呢? 如何解决精度问题呢? 这里推荐Number-Precision库,不到1K的体积。...如果是0个参数,或者没有参数,则返回 Infinity。 而 Math.max() 没有传递参数时返回的是 -Infinity。 要是面试官问这个问题,额。。。。
7、神马是 NaN,它的类型是神马?怎么测试一个值是否等于 NaN?...10、在下面的代码中,数字 1-4 会以什么顺序输出?为什么会这样输出?...,自己去运行吧,需要注意三个点: 1、多个数字和数字字符串混合运算时,跟操作数的位置有关 console.log(2 + 1 + '3'); / /‘33’ console.log('3' + 2 +...我们年轻时坚持一些自己认为是正确的东西的时候,总有些长辈,完全是出于善意好心,过来提醒你,告诉你这个社会不像你想的那样,如果你要想怎么样,就必须怎么怎么样。这种话你是不是听过很多次啊?...我长大的过程中也不断地听到这种话,我从来都不听,我就一直坚持我年轻时认为是正确的东西。——罗永浩
看起来每次调用 replaceThing 时我们都会泄漏longStr。但是这是为什么呢?...每一秒钟,当我们调用replaceThing 时,它都会保存一个对 priorThing 中先前的 theThing 对象的引用。...==)来确定一个值是否为 NaN。...但是,当我们调用 obj.whoAmI() 和 whoAmI() 时,看看它们有什么区别: obj.whoAmI(); // "MyObjectFactory {...}"...当尝试删除不可配置的属性时,非严格模式代码将静默失败,而在这种情况下,严格模式将抛出错误。 好了,上面就是我想写给 Javascript 初级开发者的一些问题总结。
指向自身 人们很容易把this理解未指向函数本身体,这个推断从英语的角度上是说得通的。那么为什么需要从函数内部引用函数自身呢?...负责的开发一定会问 :"如果我增加的count属性和预期的不一样,那我增加的是哪个count?" 实际上,如果他深入探索的话,他就会发现这段代码在无意间创建了一个全局变量count,他的值为NaN。...当然,如果他发现了这个奇怪的结果,一定会问 :“为什么时全局,为什么它的值是NaN而不是其他更适合的值” function foo(num) { console.log('foo: ' + num)...{ foo(i); } } // foo: 6 // foo: 7 // foo: 8 // foo: 9 console.log(data.count); // 4 从某种角度上来说这个方法解决了问题...每当你想要把this和词法作用域的查找混合使用时,一定要提醒自己,这是无法实现的 this 到底是什么 this是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件。
检测null的3种方式 1.这个是《你不知道的javascript》的解决方案 var a = null; if(!...,因为觉得这段代码有点丑陋,于是又想了一种: 3....找不同 这是我大谷歌中打印的console对象: 这是火狐打印的console对象 Window对象 学习JS的筒子们一般都知道, “JS有有个保存全局变量的顶层对象, 它叫Window对象,或者叫做...诡异而有趣的NaN 首先你要搞清楚的一个问题是NaN的含义 让我们猜猜它是什么意思: 1. NaN不是number,也就是number之外的类型, 例如字符串,布尔值等等 2. ...你把大量的工作花费在了写+号上和写单引号上 (虽然以我歪曲的审美觉得这段代码看起来挺“漂亮”的) 而当你使用模板字符串时就不用换行了: var str = ` <head
它的值为 NaN。如果你发现为什么是这么个奇怪的结果,那你肯定会有 “为什么它的值是 NaN, 而不是其他值?” 的疑惑。...console.log( data.count ); // 4 • 虽然从某种角度来说,解决了问题,但忽略了真正的问题——无法理解 this 的含义和工作原理,上述代码而是返回了舒适区——词法作用域。...); } foo(); // 这段代码你一共能发现几处错误?...这是不可能实现的,你不能使用 this 来引用一个词法作用域内部的东西。 this 到底是什么 • 说了这么多,那 this 到底是一个什么样的机制呢?...• 之前我们说过 this 是在运行时进行绑定的,而不是在编写时绑定的,它的上下文取决于函数调用时的各种条件。 • this 的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。
但作为一个程序员,所有这些东西并不是问题真正的解决方案,相反,它们只是帮助我们解决问题的简单工具。 在面对那些我们喜欢或是当前非常流行的特殊技术时,我们必须非常小心,而不是变得过于疯狂。...一种经常出现的情况是,当我们写出一段“聪明”的代码时,这段代码并不是特别的“清晰”。 这条规则非常重要,尤其是当我们思考我们要做一些特别“聪明”的事情时。...这个看你怎么说了。 写代码的确是我们工作的一部分,但是,我们要尽可能努力的去用最少的代码来解决问题。 所谓“最少的代码”并不是说我们只能用一个字母的变量名或者其它方式来压缩我们的代码。...当我写代码时我会遵循很多”最佳实践“,但有时我也会背离它们。 原则是永恒的,最佳实践是变通的. 11、力求精简 所有问题都可以进行分解. 最佳的解决方案往往是最简单的....傻瓜为问题提出复杂的解决方案.简化解决方案需要更多的精力和耐心,但这没有错。 花点时间。多点努力。力求精简. 你遵守什么规则? 上面是我遵守的规则,那你呢? 你个人遵守什么规则?
Promise也不错,但当代码规模越来越大时,它们总是有些别扭。 我的解决方案就是async / await,能让阅读代码变得更容易,代码变得更整洁。...下面是部分摘要: 假值 长度为0的字符串 数字0 false undefined null NaN 真值 空数组 空对象 任何其他东西 当检查真值或假值时,不需要明确写出比较,这相当于使用双等号 ==...比如,我最常遇到但就是有关数字0的bug。 5. 逻辑运算符和三元运算符 这些运算符也是用来缩减代码的,节省下宝贵的代码行数。...链式操作 你遇到过这个问题吗?在访问嵌套对象的属性时,无法事先确定对象的属性是否存在?...我最初用的是webpack版本1,当时用起来很痛苦,需要不断修改尝试各种配置选项,我在上面花了无数个小时想办法让它工作。一旦弄好我就绝不会再碰它,以免不小心破坏什么。
它善于表达因为你以需要表达的方式来写的,它是重用因为...呃,你在重用,你还有什么更多的要求吗? Curry (the5fire注:这是原文作者写的一个柯里化的包)能帮助你。...我可以通过更少的参数(返回奇怪的结果)或者更多的参数(那些额外的参数会被忽略)调用它: add(1, 2, 'IGNORE ME') //= 3 add(1) //= NaN 一个柯里化的函数是这样——...针对这种情况我们能做些什么?啊——如果映射(map)可以被部分的配置到函数上,而不是集合上呢?...(另外,我代你写了这段代码 —— 或许你可以写的更加优雅,我跑题了)。...我建议你把它用起来,并且熟悉它。如果你已经熟悉了这些概念,我怀疑你将会发现这些API直接了当并且令人满意。如果不是的话,你就要靠你自己和同事去考虑它了。
satisfies 关键字就是用来解决这个问题的,它既能让我们验证表达式的类型是否与某个类型匹配,也可以保留基于值进行类型推断的能力: type Colors = "red" | "green" | "...但是,这个写法的前提是我们用到的对象有明确的类型,如果这个对象的属性没有明确的类型呢?...NaN 是一个特殊的数值,代表 “非数字” ,在 JS 中它和任何值相比较都是 false,包括它自己: console.log(NaN == 0) // false console.log(NaN...== NaN) // true 这其实并不是 JavaScript 特有的问题,因为任何包含 IEEE-754 浮点数的语言都有相同的行为;但 JavaScript 的主要数字类型就是浮点数,并且 JavaScript...中的数字解析为 NaN 还挺常见的,所以在代码中去比较值是否等于 NaN 的情况还挺普遍的。
检测null的3种方式 1.这个是《你不知道的javascript》的解决方案 var a = null; if(!...,因为觉得这段代码有点丑陋,于是又想了一种: 3....找不同 这是我大谷歌中打印的console对象: 这是火狐打印的console对象 Window对象 学习JS的筒子们一般都知道, “JS有有个保存全局变量的顶层对象, 它叫Window对象,或者叫做...诡异而有趣的NaN 首先你要搞清楚的一个问题是NaN的含义 让我们猜猜它是什么意思: 1. NaN不是number,也就是number之外的类型, 例如字符串,布尔值等等 2....你把大量的工作花费在了写+号上和写单引号上 (虽然以我歪曲的审美觉得这段代码看起来挺“漂亮”的) 而当你使用模板字符串时就不用换行了: var str = ` <head
基于这样的数学原理,我们再来看这段代码,似乎没什么问题: 但如果输入的b是个字符串“0”呢? B站的技术解析文章中提到,这段出事的代码是用Lua写的。...Lua在对一个数字字符串进行算术操作时,会尝试将这个数字字符串转成一个数字。 在Lua语言中,数学运算n%0的结果是nan(Not A Number)。...我们来模拟一下这个过程: 1、当b是一个字符串“0”时,由于这个gcd函数没有对其进行类型校验,因此在碰上判定语句时,“0”不等于0,代码中“return _gcd(b, a%b)”触发,返回_gcd(...也就是说,这个程序开始疯狂地原地转圈,并且为了一个永远得不到的结果,把CPU占了个100%,别的用户请求自然就处理不了了。 那么问题来了,这个“0”它到底是怎么进去的呢?...不过,有人指出,死循环不罕见,罕见的是在SLB层、在分发过程出问题,它还不像在后台出问题很快能重启解决。
今天我们来学学ES6语法中,函数有什么变化。 虽然现在的有比ES6更高的版本,但是主流一般都是ES6。...我们都知道js是弱类型语言,不知道你有没有试过,或者学到过,js的函数声明过后,在调用这个函数的时候可以忽略这个函数所带的参数,就是说,声明的这个函数原本是带有参数的,但是呢,我在调用的时候是不需要传参的...,不会报错的,结果是什么呢?...你可能会说"20undefined",但是结果真不是这个,结果是"NaN",为什么?,仔细的同学就发现了,我们传的是一个20,而不是“20”,这个数字20和undefined相加的结果就成了NaN。...当我们传“20”的时候,答案就是“20undefined”,但是我想说的是,如果这时我不想传第一个值怎么办,我想穿第二个值。往下看。
如果你在两个月前问我对React的看法,我很可能这样说: 我的模板在哪里?javascript中的HTML在做些什么疯狂的事情?JSX开起来非常奇怪!快向它开火,消灭它吧! ?...你从来都不需要写代码将其进行绑定。这多酷啊,呵? 但是等等,模型不是真相的来源么? 这里的视图模型从来获得它的状态呢? 它是怎么知道模型发生了变化的呢? 有趣的问题啊....从这个示例中,看起来像是控制器有了状态,并且有类似模型的行为 - 或者也许是一个视图模型? 假设模型在其它的地方, 那它是如何保持与控制器的同步的呢? 我的头开始有点儿疼了....当依赖发生变化时,对于可以任意次序执行的代码你很难推理出问题的起因。 模板和展示逻辑被人为的分离 视图扮演了什么角色呢? 它扮演的就是向用户展示数据的角色。视图模型扮演的角色又是什么呢?...哥们,我希望某些大公司能组个超能天才开发者团来真正解决这个问题… 拥抱Facebook的React 事实证明他们做到了。React实现了一个虚拟的DOM,一种给我们带来的圣杯的利器.
上面的代码段会输出什么呢? 上面的代码段会输出什么呢? 运行结果: ? ?...很多人都会觉得,费这么大劲,理解了,浮点数除以0不会崩溃,能有什么用呢?平时我们写代码都不会除以0。这么骚的操作,我才不会这么干。 是的,这个操作是有点骚,你不会这么干并不代表其他同事不会这么做。...在我们写业务代码的时候,这个知识点,很少很少能用上。 但是当我们刚好遇到除以0导致的bug的时候,这个时候就非常有用。...尤其像android的app,用户在线上遇到的bug,我们无法复现,只能通过日志去分析排查时; 这个时候每个程序员都是福尔摩斯,根据一行行日志线索,配合实际代码,排查问题的可能性。...再然后,突然有一天发现,速度显示一串很奇怪的数字。 于是……接下来的故事,便如你们所想。 原本1小时就解决的bug,花了5个小时。 也正如,blog开头的引言所表达的。不要小看这些零零碎碎的知识点。
,在原来的块级盒子中,子元素开启 float 时,会有父元素高度塌陷等问题,父元素的高度,不会根据浮动元素的高度来设定,因此 flow-root 这种新的布局方式,解决了这个问题,开启了 flow-root...后,就会触发 BFC,从而解决高度塌陷等问题 BFC 有哪些布局规则呢?...解决了什么问题呢?...,由于 2、3 大于它们的基数 1、2 导致了它们无法被转化,返回 NaN 最终结果:[1, NaN, NaN] 那如果我们真的要实现这个将数字字符串数组,转化成纯数字数组需要怎么做呢?...如下 五、来实现一个 sleep 函数 sleep 函数就是一个等待的函数,代码运行到这里时,需要等待 sleep 函数执行完毕后,再继续执行 这题考验的是对于异步编程的理解,回调函数、生成器、async
但是我们怎样给一个神经网络设计这样的算法呢?假设我们有一 个感知机网络,想要用它来解决一些问题。例如,网络的输入可以是一幅手写数字的扫描图像。...我们想要网络能学习权重和偏置,这样网络的输出能正确分类这些数字。为了看清学习是怎样 工作的,假设我们把网络中的权重(或者偏置)做些微小的改动。就像我们⻢上会看到的,这一 属性会让学习变得可能。...这使得 逐步修改权重和偏置来让网络接近期望行为变得困难。也许有其它聪明的方式来解决这个问题。 但是目前为止,我们还没发现有什么办法能让感知机网络进行学习。...然而,我们将继续使用 S 型这个术语。 σ 的代数形式又是什么?我们怎样去理解它呢?...但是在实践中,我们可以设定一个约定来解决这个问题,例如,约定任何至少为 0.5 的输出 为表示“这是一个 9”,而其它小于 0.5 的输出为表示“不是一个 9”。
为什么需要BigInt? 在JS中,所有的数字都以双精度64位浮点格式表示,那这会带来什么问题呢?...明明我只改变了s1的play属性,为什么s2也跟着变了呢?很简单,因为两个实例使用的是同一个原型对象。 那么还有更好的方式么?...那么如何解决这个问题?...ES6的extends被编译后的JavaScript代码 ES6的代码最后都是要在浏览器上能够跑起来的,这中间就利用了babel这个编译工具,将ES6的代码编译成ES5让一些不支持新语法的浏览器也能运行...那如何来解决继承的诸多问题呢? 用组合,这也是当今编程语法发展的趋势,比如golang完全采用的是面向组合的设计方式。
领取专属 10元无门槛券
手把手带您无忧上云