标签: ecmascript-5

JavaScript 在执行块时会创建新的执行上下文吗?

JavaScript 在执行块时是否创建新的执行上下文以将其词法环境与其关联。

javascript v8 ecmascript-5 ecmascript-6

6
推荐指数
1
解决办法
1331
查看次数

投影 JavaScript 对象字段的最佳方法是什么?

我必须将 javascript 的一些字段投影到新对象。

例如我有一个下面的对象

var obj = { fn : 'Abc', 
            ln : 'Xyz', 
            id : 123, 
            nt : 'Note', 
            sl : 50000}
Run Code Online (Sandbox Code Playgroud)

我想要包含的新对象 fn and id

var projectedObj = { fn : 'Abc', id : 123 }
Run Code Online (Sandbox Code Playgroud)

基于投影

var projection = { fn : 1, id : 1 }
Run Code Online (Sandbox Code Playgroud)

像这样的东西

var projectedObj = project(obj, projection);
Run Code Online (Sandbox Code Playgroud)

那么什么是最好的方法或优化的方法来做到这一点。

javascript optimization ecmascript-5 ecmascript-6

6
推荐指数
1
解决办法
3763
查看次数

在打字稿中创建动态类实例

我正在使用 webpack、typescript 2.8、es5。

我想从变量名创建动态类实例,例如:

protected handleAfterInit(page) : void 
{

    let instance: any;
    let pageName: string = this.capitalizeFirstLetter(page);

    console.log(pageName);

    instance = Object.create((window[pageName]).prototype);
    instance.constructor.apply(instance);

    console.log(instance);
}
Run Code Online (Sandbox Code Playgroud)

其中 pageName 是一个变量(主页、关于等),并且这些类已经导入到页面顶部:

import { Home } from "./Home";
import { About } from "./About";
Run Code Online (Sandbox Code Playgroud)

但使用当前代码我收到错误:

无法读取未定义的属性“原型”

好像没有窗户。{class}

是否可以在打字稿中做这样的事情?

ecmascript-5 typescript

6
推荐指数
1
解决办法
4589
查看次数

如何将对象数组文件访问到反应组件中?

我正在尝试访问 src 文件夹中的对象数组文件,例如:data.js(仅限对象数组)将此文件放入我的 app.js(反应组件)

在第一个场景 1.我已经尝试使用 react in 这个问题

src--[app.js(组件)/data.js(对象数组)]。

当我运行时,它向我显示了一个错误,例如

(类型错误:_data__WEBPACK_IMPORTED_MODULE_1___default.a.map 不是函数)表示空数组/未定义。

在第二个场景中 2. 当我在同一页面内的 app.js 中添加对象数组时,它向我展示了完美的结果。没有错误,但尝试从另一个文件(如 data.js)获取空数组我曾经使用过stringify()和 JSON 解析器,但没有结果

对象数组文件 data.js ->

const datas=[
    {
    "id":"1",
    "firstname":"sam",
    "lastname":"parkar"
    },
    {
    "id":"2",
    "firstname":"julee",
    "lastname":"fransic"
    }
    ];
Run Code Online (Sandbox Code Playgroud)

反应组件 app.js ->

import React from 'react';
import  datas from './data';
import  DataInfo from './DataInfo';
function App () {
 const appdata=datas.map( inner => inner.id + inner.firstname + inner.lastname)
//print on console
 console.log(appdata)
    return (
     <div className="App">
           <p>App js page</p>

              {appdata} 

      </div> …
Run Code Online (Sandbox Code Playgroud)

javascript arrays ecmascript-5 reactjs webpack-4

6
推荐指数
1
解决办法
6402
查看次数

打字稿:'new' 表达式,其目标缺少构造签名,隐式具有 'any' type.ts(7009)

以下是最适合在 Chrome Devtools、Node.js 等中显示自定义错误的代码。基于此 StackOverflow 答案

function CustomErr (message) {
  var err = new Error(message)
  Object.setPrototypeOf(err, CustomErr.prototype)
  return err
}

CustomErr.prototype = Object.create(Error.prototype, {
  name: { value: 'Custom Error', enumerable: false }
})
Run Code Online (Sandbox Code Playgroud)

但是,当我将其转换为 Typescript 时:

function CustomErr (message: string) {
  var err = new Error(message)
  Object.setPrototypeOf(err, CustomErr.prototype)
  return err
}

CustomErr.prototype = Object.create(Error.prototype, {
  name: { value: 'Custom Error', enumerable: false }
})
Run Code Online (Sandbox Code Playgroud)

调用throw new CustomErr("something went wrong")显示此错误:

'new' expression, whose target lacks a construct …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-5 typescript

6
推荐指数
1
解决办法
6356
查看次数

Typescript 无法仅找到 CI 类

我有一个Angular项目,当我在本地运行“ng test”时,一切正常,但是在 bitbucket 管道中我遇到了这个错误。

src/app/services/user-store/user.service.ts:7:22 中出现错误 - 错误 TS2307:找不到模块“../../models/user”或其相应的类型声明。7 从 '../../models/user' 导入 { User };

我的 tsconfig.base

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    "module": "es2020",
    "lib": [
      "es2018",
      "dom"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我的 tsconfig.spec.json

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./out-tsc/spec",
    "types": [
      "jasmine"
    ]
  },
  "files": [
    "src/test.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.spec.ts",
    "src/**/*.d.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我认为与我的 tsconfig.base 中的“目标”相关,但我不确定,也许我的 yaml …

pipeline bitbucket ecmascript-5 typescript bitbucket-pipelines

6
推荐指数
0
解决办法
665
查看次数

Webpack 错误:configuration.module.rules[0] 有一个未知的属性“query”

我正在关注本教程:https://www.youtube.com/watch? v=iWUR04B42Hc ,我知道它的内容已过时,但我认为已将其正确翻译为最新版本的Webpack,但它给了我这个错误configuration.module.rules[0] has an unknown property 'query'.

完整版

[webpack-cli] Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.
 - configuration.module.rules[0] has an unknown property 'query'. These properties are valid:
   object { assert?, compiler?, dependency?, descriptionData?, enforce?, exclude?, generator?, include?, issuer?, issuerLayer?, layer?, loader?, mimetype?, oneOf?, options?, parser?, realResource?, resolve?, resource?, resourceFragment?, resourceQuery?, rules?, scheme?, sideEffects?, test?, type?, use? }
   -> A rule description with conditions and …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-5 ecmascript-6 webpack babeljs

6
推荐指数
1
解决办法
6895
查看次数

逐步从ES5迁移到TS

我正在运行一个庞大的项目,其中有数千个.js文件是用 编写的es5,出于多种原因和好处TS,我们决定开始迁移到TS,经过几天的研究和许多研究,我将详细阐述一个几点:

要开始从 迁移es5到 ,ts我们可以通过两种方式开始:

第一种方式:

1-安装ts、创建tsconfigallowJS设置为 true,然后开始将文件扩展名更改为.ts,默认情况下一切都会正常工作

2-由于我们想要逐渐迁移,所以我们不想立即将全局脚本替换为本机模块,换句话说,我们不想立即键入importand export,而是希望保留旧的方式global scripts并使用/// <reference path="">to加载依赖项

3-在上一步之后我们可以逐渐开始将文件转换为本机模块esm

第二种方式:

1-正如我所读到的有关UMD 的内容,它将在 borwser(客户端)和服务器上工作,这意味着支持所有类型的模块AMD, CommonJS, SystemJS and Native ES modules

2-在时尚中重写脚本后UMD,我们可以逐渐开始将脚本移动到ESM

最后但并非最不重要的一点是,关于情报,我们将开始.d.ts相应地编写文件,或者我们可以依靠它ts-loader来生成文件

最后,我们要么选择ts-loader要么babel,但我们不确定每个选项是否都有一些限制

任何有关开始迁移的最佳方式的想法都值得赞赏

javascript ecmascript-5 typescript ts-loader babel-loader

6
推荐指数
1
解决办法
935
查看次数

如何确保ES3程序在ES5引擎中运行?

所以ECMAScript 5引入了与ECMAScript 3的一些不兼容性.


示例:

已经写了许多文章,说明在ES5严格模式下this === null || this === undefined是可行的:

"use strict";
(function () {
    alert(this); // null
}).call(null);
Run Code Online (Sandbox Code Playgroud)

但是,标准 真正建议的是ES5引擎在非严格模式下也允许这样:

15.3.4.3 ...将thisArg值作为this值传递而不进行修改.这是对第3版的更改,其中a undefinednullthisArg替换为全局对象,ToObject应用于所有其他值,并将结果作为this值传递.

目前,IE9是唯一以这种方式实际实现ES5的浏览器,事实证明这可能会破坏当前的脚本.大.


ES5规范的 Annix E 列出了许多其他不兼容性.

那么,确保我们久经考验的ES3脚本能够完美运行的最佳方法是什么?某种自动化测试套件?我们必须手动测试吗?

javascript backwards-compatibility ecma262 ecmascript-5

5
推荐指数
2
解决办法
1870
查看次数

JavaScript闭包 - 使用ECMA规范,请解释如何创建和维护闭包

我正在阅读有关JavaScript闭包的内容.我熟悉执行上下文,如何维护词汇环境,以及非常熟悉词法范围.

我想知道如何创建维护 JavaScript中的闭包.有时我很难掌握这些重要的概念而不知道它是如何实现的.我知道,根据维基百科的说法,关闭是

是函数或函数的引用以及引用环境 - 一个存储对该函数的每个非局部变量(也称为自由变量)的引用的表.

但我的问题是,根据ECMA规范,我想知道如何创建和维护闭包.我不是在寻找关闭理论的高级解释,请在答案中参考ECMA规范.

注意:请不要认为这是重复的,除非答案解释了使用ECMA规范的闭包.同样,我对引用维基百科和举例的人不感兴趣,我想完全理解JavaScript如何做到这一点.(我在SO上熟悉这个问题).

javascript closures ecma262 ecmascript-5

5
推荐指数
1
解决办法
521
查看次数