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)
那么什么是最好的方法或优化的方法来做到这一点。
我正在使用 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}
是否可以在打字稿中做这样的事情?
我正在尝试访问 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) 以下是最适合在 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) 我有一个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
我正在关注本教程: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) 我正在运行一个庞大的项目,其中有数千个.js文件是用 编写的es5,出于多种原因和好处TS,我们决定开始迁移到TS,经过几天的研究和许多研究,我将详细阐述一个几点:
要开始从 迁移es5到 ,ts我们可以通过两种方式开始:
第一种方式:
1-安装ts、创建tsconfig并allowJS设置为 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,但我们不确定每个选项是否都有一些限制
任何有关开始迁移的最佳方式的想法都值得赞赏
所以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版的更改,其中aundefined或nullthisArg替换为全局对象,ToObject应用于所有其他值,并将结果作为this值传递.
目前,IE9是唯一以这种方式实际实现ES5的浏览器,事实证明这可能会破坏当前的脚本.大.
ES5规范的 Annix E 列出了许多其他不兼容性.
那么,确保我们久经考验的ES3脚本能够完美运行的最佳方法是什么?某种自动化测试套件?我们必须手动测试吗?
我正在阅读有关JavaScript闭包的内容.我熟悉执行上下文,如何维护词汇环境,以及非常熟悉词法范围.
我想知道如何创建和维护 JavaScript中的闭包.有时我很难掌握这些重要的概念而不知道它是如何实现的.我知道,根据维基百科的说法,关闭是
是函数或函数的引用以及引用环境 - 一个存储对该函数的每个非局部变量(也称为自由变量)的引用的表.
但我的问题是,根据ECMA规范,我想知道如何创建和维护闭包.我不是在寻找关闭理论的高级解释,请在答案中参考ECMA规范.
注意:请不要认为这是重复的,除非答案解释了使用ECMA规范的闭包.同样,我对引用维基百科和举例的人不感兴趣,我想完全理解JavaScript如何做到这一点.(我在SO上熟悉这个问题).
ecmascript-5 ×10
javascript ×8
typescript ×4
ecmascript-6 ×3
ecma262 ×2
arrays ×1
babel-loader ×1
babeljs ×1
bitbucket ×1
closures ×1
optimization ×1
pipeline ×1
reactjs ×1
ts-loader ×1
v8 ×1
webpack ×1
webpack-4 ×1