---- 问: 在linux系统里,普通用户目录是在 /home 下,root用户目录在 /root,因此全部用户共享目录的。 那如果我们要装一个东西的话,是不是只用装一遍?...(比如说ohmyzsh之类的) 我之前在自己服务器上,每次都需要安装两遍,一次只有当前那个用户生效,这是为什么呢?...---- 答: 不一定,当我们说我们在 linux 装了一个东西,指的是:「我们装了一个命令,可全局执行」。此时是将该命令放在了全局执行目录(或者将该命令目录放在了 $PATH)。
在 JavaScript 中写成如下形式: 13 在程序中使用这个值的时候,就会将数字 13 以位序列的方式存放在计算机的内存当中。...今天,即使是装在口袋里的电脑也有足够的内存,所以你可以自由使用 64 位的块,只有在处理真正的天文数字时才需要担心溢出。 不过,并非所有 18 亿亿以下的整数都能放在 JavaScript 数值中。...自动类型转换 在引言中,我提到 JavaScript 会尽可能接受几乎所有你给他的程序,甚至是那些做些奇怪事情的程序。...我建议使用三字符比较运算符来防止意外类型转换的发生,避免作茧自缚。但如果比较运算符两侧的值类型是相同的,那么使用较短的运算符也没有问题。...条件运算符以类似的方式工作。 在第二个和第三个值中,只有被选中的值才会求值。 本章小结 在本章中,我们介绍了 JavaScript 的四种类型的值:数字,字符串,布尔值和未定义值。
在附录B中,Douglas Crockford列出了12种应该避免使用的Javascript语法,我觉得非常值得推广。.... == Javascript有两组相等运算符,一组是==和!=,另一组是===和!==。前者只比较值的相等,后者除了值以外,还比较类型是否相同。 请尽量不要使用前一组,永远只使用===和!==。...所以通过适当的构造,完全可以避免使用这条命令,使得效率得到改善。 5. switch 贯穿 switch结构中的case语句,默认是顺序执行,除非遇到break,return和throw。...但是在解析的时候,前一种写法会被解析器自动提升到代码的头部,因此违背了函数应该先定义后使用的要求,所以建议定义函数时,全部采用后一种写法。 10....但是在Javascript中,void是一个运算符,接受一个运算数,并返回undefined。 void 0; // undefined 这个命令没什么用,而且很令人困惑,建议避免使用。 (完)
原创@飞白 上期在阅读《Javascript权威指南》第六版类型转换这一章节的时候,我虽然搞清楚了之前留下的很多疑问,比如说数据类型转换的基本规则,对象到原始值的转换规则等。...不管得到的原始值是否直接使用,它都不会进一步被转换为数字或字符串。 +、==、!=和关系运算符是唯一执行这种特殊的字符串到原始值的转换方式的运算符。...其他运算符到特定类型的转换都很明确,而且对日期对象来讲也没有特殊情况。例如-(减号)运算符把它的两个操作数都转换为数字。 复制这么长一段文字呢,也不是为了凑字数,是我一开始真的没看明白这段。...其实我上篇写到最后一小节隐式转换的时候,已经提到了,不同运算符对于对象的转换规则是特殊的。 在不同的使用场景中,javascript会根据实际情况进行类型的隐式转换。...恒等运算符会首先判断数据类型是否一致,而==运算符不要求两个操作数类型一致,当两个操作数不一致时,会按照一定的规则进行操作数的隐式转换。
陌生的事情 在 JavaScript 中,在两种类型之间进行转换时有一些奇怪的规则。让我给你一些背景信息。先用 Python 举一个例子。...JavaScript 规范充满了这个疯狂的规则,我强烈鼓励大家对它深入挖掘。 在此期间除非你有充分的理由否则在 JavaScript 代码中避免使用抽象比较运算符。你以后会感谢自己的。...规范中的说 严格相等比较【http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6】在把值与三等 === 进行比较之前没有进行自动转换。...JavaScript 开发人员可以使用算术和比较运算符来操作这些类型。但是我们要特别注意加法运算符 + 和抽象比较运算符 ==,它本质上倾向于在类型之间进行转换。...JavaScript 中的隐式转换称为强制类型转换,并在 ECMAScript 规范中定义。无论什么时候你的代码都要使用严格的比较运算符 === 而不是 ==。
“Web 开发人员已经在使用它。”[JavaScript 是一种广为人知的语言,特别是在 Web 环境中。] “DOM API 是基于事件的。每个人都已经习惯了在没有线程和事件循环上运行。”...在严格模式下被禁止的特性 在严格模式下,还有两个 JavaScript 特性是被禁止的: 不再允许使用with语句(参见The with Statement)。在编译时(加载代码时)会得到语法错误。...JavaScript 是动态类型的;变量的类型通常在编译时不知道。 静态类型检查与动态类型检查 如果你有类型信息,你可以检查在操作中使用的值(调用函数、应用运算符等)是否具有正确的类型。...[3]) '3' 注意 在 JavaScript 中没有办法重载或自定义运算符,甚至没有相等性。...始终使用严格相等,避免宽松相等。只有在您想知道为什么应该避免它时,才需要了解后者。 相等是不可定制的。JavaScript 中的运算符不能被重载,也不能定制相等的工作方式。
中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "object"。...规范中的所有 [[...]] 方法或者属性都是内部的, 在 JavaScript 中不能直接使用。并且规范中说明,只有 Function 对象实现了 [[HasInstance]] 方法。...__proto__ = null // 第三次判断 L == null // 返回 false 简析 instanceof 在 Dojo 继承机制中的应用 在 JavaScript 中,是没有多重继承这个概念的...Foo 同时继承自 Aoo 和 Boo,但当使用 instanceof 运算符来检查 foo 是否是 Boo 的实例时,返回的是 false。...实际上,在 Dojo 的内部,Foo 仍然只继承自 Aoo,而通过 mixin 机制把 Boo 类中的方法和属性拷贝到 Foo 中,所以当用 instanceof 运算符来检查是否是 Boo 的实例时,
逻辑赋值是对现有数学和二进制逻辑运算符的扩展。我们先复习一下,然后看看把它们结合在一起能得到什么。 首先,我们来看下 JS 中条件运算符与无条件运算符之间的区别 ?。...无条件 vs 有条件 数学运算符,例如 +是无条件的。 在const x = 1 + 2中,无论如何,我们总是将LHS添加到RHS中,并将结果分配给x。...二元逻辑运算符 && || ?? 在 JSX 中我们经常使用&&和||来有条件地渲染界面。??是nullish(空值)合并运算符,它是最近刚通过提案的,很快就会普及。它们都是 二元逻辑运算符。...使用&&测试 LHS 的结果是否是真值。 使用||测试 LHS 的结果是否是虚值。 用 ?? 测试 LHS 是否无效。 虚值 vs Nullish 在 JS 中有哪些算是虚值呢 ??...虽然这种速记看起来很流畅,而且我相信当我们发现更多的用例时,它会派上用场的。
所以,判断myobj是否为空,等同于判断window对象是否有myobj属性,这样就可以避免因为myObj没有定义而出现ReferenceError错误。...第五种写法 还可以使用typeof运算符,判断myObj是否有定义。 ...javascript的语言设计,undefined == null,所以比较myObj是否等于null,也能得到正确结果: if (myObj == null) { var myObj...因此,这里只能使用"比较运算符"(==),如果这里使用"精确比较运算符"(===),就会出错。 第九种写法 还可以使用in运算符,判断myObj是否为顶层对象的一个属性: if (!...为了跨平台,建议避免使用window表示顶层对象。 5. 在Javascript语言中,null和undefined容易产生混淆。在可能同时涉及两者的情况下,建议使用"精确比较"运算符(===)。
例如:我把script标签写在head和body标签之间,那么在解析执行script标签里面的脚本代码时,body里面的内容是不会被执行的,只有执行到body才会开始执行body里面的内容。...如果我br没有使用引号引住就会在控制台里报错,并不会把错误信息显示在页面上,所以我们要在控制台中查看错误信息,在浏览器中按F12就可以进入控制台: ? ?...函数(方法): JavaScript的函数声明方式也有点特别,没有权限修饰符,函数的静态与实例区分在于是否用对象或者this关键字来声明,函数即便有返回值也不用声明返回值类型,直接return返回即可,...构造函数声明方式,这种方式是创建一个新的Function对象,需要用变量去接收它,而且这种方式在代码调用中是最为低效,因为使用Function构造器生成的Function对象是在函数创建时解析的,这种函数只能执行...在JavaScript 的函数声明中有一个概念叫做函数声明提升。 JavaScript 中的函数声明被提升到了函数定义。你可以在函数声明之前使用、调用该函数。
这就是为什么我喜欢可选链的原因。 2.1 数组项 可选链能还可以做更多的事。你可以在同一表达式中自由使用多个可选链运算符。甚至可以用它安全地访问数组项! 下一个任务编写一个返回电影主角姓名的函数。...例如,让我们更改 getLeading() 函数,以在电影对象中没有演员时返回 "Unknown actor" : function getLeadingActor(movie) { return...name,因为 director 可以是 undefined,所以在 director 属性附近使用可选链运算符是正确的。 相反,使用 ?. 访问电影标题 movie?.title 没有任何意义。...我为什么喜欢它? 我喜欢可选链运算符,因为它允许轻松地从嵌套对象中访问属性。它可以防止编写针对访问者链中每个属性访问器上的空值进行验证的样板代码。...当可选链与空值合并运算符结合使用时,可以得到更好的结果,从而更轻松地处理默认值。 你还知道哪些可选链的好案例?请在下面的评论中描述它!
运算符是JavaScript 提供的, javascript 与typescript中都可以使用 !...操作符是用于Typescript的, 只有在typescript环境中可以使用 接下来,我们将逐一介绍它们的用法和意义。 1. ??(空值合并运算符) 空值合并运算符 (??)...但是,通过使用 ?. 运算符,我们可以安全地访问属性,并在链中的任何环节为 null 或 undefined 时得到 undefined 而不是错误。 相当于&& a?....使用非空断言时,开发者实际上是在告诉编译器:“我知道这个值不可能是 null 或 undefined,所以请相信我,不要在这里报错。”...然而,使用这些操作符时,开发者需要确保他们的假设是正确的,以避免运行时错误。在使用 !
为了更好的了解JavaScript的知识,我把JavaScript的知识大体总结成为了一下几个模块,这样子也是方便大家对JavaScript有一个整体的认识。...后面对JavaScript简称为js,在HTML中,js脚本必须放在之间,至于标签对的位置就相对比较随意了,可以放在head中,body中,位置较为随意...js语言单独放置在一个文件中,并引入HTML。...有小伙伴一定会奇怪,在不同地方引入js有什么区别呢,这里就涉及到了js的加载顺序问题,因为js是单线程的,所以当没有特殊处理时,会按照页面的引入顺序进行加载,如果前面的js加载时间过长,就会引发阻塞了(...typeof运算得到“object”(说人话就是还没有定义);undefined当一个声明了一个变量未初始化时,就会得到undefined(说人话就是声明了,但是没有赋值)。
默认情况下,使用 Object.defineProperty() 添加的属性不可写、不可枚举且不可配置。 可配置属性指定是否可以从对象中删除属性,以及将来是否可以更改属性描述符。...根据这个定义,我们得到以下结果: parseInt('9', 0) -> radix 0 等同于没有基数的调用。...两者都使用三个点(…),但这两个运算符不一样。 它们之间的主要区别在于,rest 运算符的目标是在扩展运算符将可迭代对象扩展为单个元素时,将其余一些提供的值放入一个数组中。...但是,如你所见,没有一个克隆具有经过验证的属性。这是因为 ...spread 运算符和 Object.assign 在克隆时都忽略了原型。 这些对象的原型: admin....,一般 JS 引擎中没有。
❝「目录」 使用 JavaScript 空值合并运算符 使用实例 空值合并运算符与逻辑或( ||) 浏览器支持 总结 ❞ 在ES2020中,我们获得了在其他语言中( 如 C# 和 PHP)早已可用的功能...我一直喜欢这个名字,因为每当我说这个名字时,都会觉得自己很聪明。? ❝空值合并运算符将会遍历列表,并返回第一个不是 null[3] 或 undefined[4] 的值。...'second' // first 在下面的例子中,我们在变量中存储了一些值: let person // <-- person is undefined here person ??...如果只想检查是否为 null 或 undefined,就用 ??。 浏览器支持 在撰写本文时,最新版本的 Chrome、Firefox、Edge 和 Safari 可以使用空值合并运算符。 ?...总结 空值合并运算符是该 JavaScript 语言不错的补充。拥有更多检查值的选择并没有什么坏处。
12种不宜使用的Javascript语法 《Javascript语言精粹》的附录B中,Douglas Crockford列出了12种应该避免使用的Javascript语法,现总结如下: 1. ==...所以通过适当的构造,完全可以避免使用这条命令,使得效率得到改善。 5. switch 贯穿 switch结构中的case语句,默认顺序执行,除非遇到break,return和throw。...9. function语句 在Javascript中定义一个函数,有两种写法: function foo() { } 和 var foo = function () { } 两种写法完全等价。...但是在解析的时候,前一种写法会被解析器自动提升到代码的头部,因此违背了函数应该先定义后使用的要求,所以建议定义函数时,全部采用后一种写法。 10....但是在Javascript中,void是一个运算符,接受一个运算数,并返回undefined。 void 0; // undefined 这个命令没什么用,而且很令人困惑,建议避免使用。
如果一个变量没有声明就直接使用,JavaScript 会报错,告诉你变量未定义。...x // ReferenceError: x is not defined 上面代码直接使用变量x,系统就报错,告诉你变量x没有声明。 可以在同一条var命令中声明多个变量。...上面代码在区块内部,使用var命令声明并赋值了变量a,然后在区块外部,变量a依然有效,区块对于var命令不构成单独的作用域,与不使用区块的情况没有任何区别。...上面代码中,由于变量x没有发生类型转换,所以不会执行case true的情况。这表明,switch语句内部采用的是“严格相等运算符”。 三元运算符 ?...结论: 上面的javaScript循环,switch语句,三元运算符都是引用java的规则的,我么使用这些语法时完全可以套用java的用法。
1.可选运算符 在JavaScript中,我们一直在使用对象,但有时候对象里并不是我们期望的数据结构。假设下面是我们期望得到的数据,可能是通过调用API查询数据库得到的。...: const data = { user: {}}; 当尝试按下面的方式访问street时,会得到报错: console.log(data.user.address.street);// Uncaught...,一个常见的场景是,某些旧版浏览器可能没有某些功能,我们可以使用可选运算符接来检测函数是否已实现。...'default value'; 这可以保护我们不会为0、false和''设置默认值,在不使用三元运算符和!= null检查的情况下捕获null和undefined。...3.管道运算符 在函数式编程中,我们有一个概念叫compose,它多个函数调用合并在一起,调用时从右到左执行每个函数,函数接收前一个函数的输出作为其输入,以下是我们在纯JavaScript中讨论的一个示例
遇事先百度,学习关注我,今天我们来学学JavaScript 八、运算符 8.1、运算符的分类 运算符(operator)也被称为操作符,**是用于实现赋值、比较和执行算数运算等功能的符号。...所以在JavaScript中不要直接判断两个浮点数是否相等 !...在 JavaScript 中,递增(++)和递减( – )既可以放在变量前面,也可以放在变量后面。...放在变量前面时,我们可以称为前置递增(递减)运算符,放在变量后面时,我们可以称为后置递增(递减)运算符。递增和递减运算符必须和变量配合使用。...当要针对变量设置一系列的特定值的选项时,就可以使用 switch。 执行case 里面的语句时,如果没有break,则继续执行下一个case里面的语句。
而JavaScript中的 == 运算符在某种特例上违背了传递性。 with语句 JavaScript提供了一个with语句,本意是想使用它来快捷访问对象的属性。...with语句在JavaScript中存在,本身就严重影响了JavaScript处理器的速度,因为它阻断了变量名的语法作用域绑定。它的本意是好的,但是如果没有它,JavaScript语言会更好一点。...当使用++ 和 --时,代码往往过于拥挤、复杂和隐晦。因此,作为一条原则,我不再使用它们。团队上也可以规范一波,那样我们的代码风格会变得更加整洁。...如果忘记了使用此new运算符,你得到的就是一个普通的函数调用,并且this被绑定到全局对象,而不是新创建的对象。者意味着当你的函数尝试去初始化新成员属性时它将会污染全局变量。这是一件非常糟糕的事情。...幻想下就行啦~ void 在很多语言中,void 是一种类型,表示没有值(空值)。而在JavaScript中,void是一个运算符,它接受一个运算数并且返回undefined。
领取专属 10元无门槛券
手把手带您无忧上云