问题标签 [strict-mode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 在“非严格模式”上访问函数范围的 JavaScript 变量
我的问题:
为什么可以(在非严格模式下)访问函数作用域变量?这不应该被允许吗?
为什么我什至可以更改常量的值?
在这种特定情况下,示波器或吊装如何在幕后工作?
javascript - Material-UI Select onChange 的问题
我正在使用 Material-UI 选择并且在收到警告时无法访问选择值:
这是我在 Select 中使用的代码:
当我尝试在屏幕上显示 {myType} 时,什么也没有出现。
是否有解决此问题的方法,因为我似乎只在更改 material-ui 选择值时出现此错误?
angular - 如何在严格的 Angular 应用程序中以非严格模式导入库?
我正在尝试在 Angular 11 项目中导入jschardet 。当前版本 3.0.0未在严格模式下运行(在运行时抛出 TypeError)。我试图在一个最小的例子中重现这个问题。因此,我生成了一个新的 Angular 项目并使用相同的依赖项和配置(即,我在两个项目中使用相同的tsconfig.json
、tsconfig.app.json
、和)。但是,TypeError 仅发生在我的大型/原始项目中。我未能在一个较小的项目中重现它。我猜我的大项目以某种方式以严格模式运行(即使我没有在提到的文件中明确指定它),但是我的新项目没有运行angular.json
package.json
package-lock.json
jschardet
jschardet
在严格模式下。我不知道,哪些文件与共享相关以解决这个问题。请在评论中告诉我。
无论如何,我不想在非严格模式下运行我的 Angular 应用程序,只有一个导入的库需要非严格模式。如何在非严格模式下导入/调用特定库?
以下文件、版本和更多信息:
- jscharder 3.0.0
- 打字稿 4.0.5
- @angular/编译器 11.1.0
src/app/app.component.ts
tsconfig.json
src/tsconfig.json
angular.json(缩短)
我使用ng serve
.
angular - Angular 严格模式、Ngrx、Jamsmine:带道具的模拟选择器
我目前正在尝试删除我的应用程序中已弃用的选择器。这个github 问题告诉我们将带有 props 的选择器声明为函数。
旧方式(已弃用):
新的方法:
overrideSelector
使用不推荐使用的方法,我可以通过用函数覆盖选择器来模拟选择器。
现在这getCurrentScope
不再是选择器,我无法使用该overrideSelector
功能。
所以我试图模拟如下函数:
当我使用 Angular 严格模式时,我必须返回一个 MemoizedSelector 但我找不到任何方法来执行它。
有人可以帮我吗?
material-ui - Material-UI/app-bar/#back-to-top-findDOMNode 在 StrictMode 中已弃用。findDOMNode 被传递了一个在 StrictMode 内的 Transition 实例
我使用 material-ui 回到顶部(https://material-ui.com/components/app-bar/#back-to-top)来创建一个返回顶部菜单并且它工作正常但是问题是当我滚动时向下并出现返回顶部菜单我在控制台中收到警告:
我的代码是:
我是新来的反应,我不知道它的建议解决方案(相反,直接向元素添加一个 ref)。
我该如何解决这个问题?感谢你们
javascript - 为什么 toString 总是在严格模式下运行?
我知道根据 ECMAScript 规范,非严格方法会将thisArg转换为全局对象,如果null
或被undefined
传递给它们。这就是此代码记录窗口对象(在浏览器中)而不是 null 的原因:
我不明白的是,为什么用Object.prototype.toString.call(null)
, 做同样的事情不会转换null
为全局对象,而是保持原样null
并返回字符串[object Null]
。
是因为在方法'use strict'
的默认实现中使用了toString
?每个内置方法都在严格模式下运行吗?
我在规范中找不到类似的东西https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.prototype.tostring。
javascript - 在 JavaScript 模块中使用 this
我写了以下代码(模拟):
我收到错误“测试不是函数”。
并尝试了以下方法:
该解决方案仍然无法正常工作,因为 JavaScript 模块默认开启了严格模式。有谁知道这个问题的解决方案?
reactjs - 意外状态更新导致“useState”函数
考虑这个使用函数更新useState
对象的简单示例:
App.tsx
将其放入标准的 create-react-app 打字稿模板(使用 React 17.0.2),并在开发模式下运行应用程序。继续单击更新按钮并观察控制台。很快就会遇到预期状态和实际状态之间的差异,例如
在上面的控制台日志中,id: 1636301326612
状态突然出现,因为设置的状态是id: 1636301326611
.
更奇怪的是,当应用程序是为生产而构建时,我无法重现这一点。此外,如果我放弃功能更新并仅将对象传递给setState
注释掉的代码(由于原子性要求,在我的实际非玩具代码中不可行),问题似乎也不存在。
我完全不知所措。我是否以setState
某种方式使用错误?
如有必要,我可以提供一个完整的示例 repo。
angular - 如何编写这个表达式,它使用括号中的字符串来引用 Typescript 中对象的属性
我在 Angular 中使用严格模式,现在这是错误的原因。我正在将 Angular 8 项目迁移到 Angular 13。