我正在努力了解如何将 CommonJS 模块导入 ESM 语法。我目前正在尝试与图书馆合作url-metadata。url-metadata将顶级导出公开为可调用(据我所知,这并不真正符合 CommonJS):
const urlMetadata = require('url-metadata')
urlMetadata(URL, ...)
Run Code Online (Sandbox Code Playgroud)
不可能写成:
import urlMetadata from 'urlMetadata'
Run Code Online (Sandbox Code Playgroud)
因为没有定义默认导出。
相反,我必须写:
import * as urlMetadata from 'url-metadata'
Run Code Online (Sandbox Code Playgroud)
或者:
import urlMetadata = require("url-metadata")
Run Code Online (Sandbox Code Playgroud)
我尝试阅读 Node 中的模块加载,但我仍然有些困惑,不知道执行此操作的正确方法是什么以及为什么。
根据规范(附件C),严格模式代码几乎不能做任何可能使用名称分配任何标识符的内容 eval.我可以理解,人们可能想限制使用实际eval功能,但我不明白限制使用名称的目的是什么?
我们来看下面的示例代码:
var ns = {}; // Some namespace
ns.Test = function()
{
// Constructor of class Test
};
var inst = new ns.Test();
var className = hereIsTheMagic(inst); // Must return "ns.Test"
Run Code Online (Sandbox Code Playgroud)
所以我在命名空间'ns'中创建了一个名为'Test'的类,并且这个类的实例名为'inst'.现在我想找出班级名称.我怎样才能做到这一点?
到目前为止,我通过为每个类提供一个带有类名的字符串属性来解决这个问题,因此我可以使用它inst.constructor.className来访问类名.但是如果可能的话,我想停止这样做,因为在复制/粘贴类时它很容易出错.
如果没有适用于所有当前浏览器的解决方案,可能在未来的ECMAScript规范中至少有一些新功能可以提供对类名的访问?
有没有之间的差异typeof value === "undefined"和value === undefined?
为什么Array.isArray()在ECMAScript 5中需要JavaScript ?我不能只是调用value instanceof Array来确定给定变量是否是一个数组?
根据ECMA-262的原生物体
ECMAScript实现中的对象,其语义完全由此规范定义,而不是由主机环境定义
内置对象定义为
由ECMAScript实现提供的对象,独立于主机环境,在ECMAScript程序执行开始时出现.
附注意
标准内置对象在本规范中定义,ECMAScript实现可以指定和定义其他对象. 每个内置对象都是本机对象.
如果ECMA-262规范完全定义了本机对象而不是主机环境,并且ECMAScript实现可以指定和定义新的内置对象,那么这些新的内置对象如果不是本机对象又是怎么回事?完全由ECMA-262规范定义?
我错过了什么?
这按预期工作
[97,98].map(function(x){String.fromCharCode(x)})
// [ 'a', 'b' ]
Run Code Online (Sandbox Code Playgroud)
但输出跟随线是意外的
[97,98].map(String.fromCharCode)
// [ 'a\u0000\u0000', 'b\u0001\u0000' ]
Run Code Online (Sandbox Code Playgroud) 面对JavaScript Date功能问题,returns "Date {Invalid Date}"在Firefox浏览器中可以正常使用Google Chrome.
// My Input is
new Date("Sat Jan 01 00:00:00 EST 1");
// Works fine in google chrome
// Result: Mon Jan 01 2001 10:30:00 GMT+0530 (India Standard Time)
// Not working in Firefox (Version: 15.0.1)
// Result: Date {Invalid Date}
Run Code Online (Sandbox Code Playgroud) 我的JavaScript项目中有es5-shim.js和underscore.js.
ES5-shim.js只需添加一些JavaScript原生功能,如reduce和some对Internet Explorer和一些旧的浏览器阵列.underscore.js添加相同的东西(但使用不同的语法)和更多的东西(对象和数组上的实用程序函数).
但是,如果es5-shim添加的函数存在,则underscore.js会使用它们.
因此,在像Firefox或Chrome这样的"最近"浏览器中,underscore.js使用浏览器的本机功能.我认为它比纯粹的javascript函数更好.但是在Internet Explorer上,underscore.js使用es5-shim函数.如果我删除es5-shim.js,则underscore.js使用自己的函数.
有什么建议吗?我应该从我的项目中删除es5-shim并仅使用underscore.js吗?或者我应该让underscore.js使用es5-shim的功能?
我想从没有实例调用的静态函数调用内部函数,如下所示:
Foo.Bar = function (options) {
Autodesk.Viewing.Extension.call(this, options);
...
this.innerFunc = function innerFunc(){
...
}
};
Foo.Bar.prototype.constructor =
Foo.Bar;
Foo.Bar.SomeStaticFunc = function () {
innerFunc();
}
Run Code Online (Sandbox Code Playgroud)
使用:Foo.Bar.SomeStaticFunc();.
但我明白了SomeStaticFunc is not a function.
这里的例子使用了一个变量用于类,var Foo.Bar = function (options) {...但是不像创建类的实例那样并调用内部函数?
let x= new Foo.Bar(options);
x.innerFunc();
Run Code Online (Sandbox Code Playgroud)
还有另一种方法吗?
PS:我知道ES6课程,但我现在不想将这个课程迁移到ES6,因为它不是完全直截了当的.
console.log(document.getElementsByTagName('html')['0'].textContent);
console.log(document.getElementsByTagName('html')['0'].innerText);Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p>innnerHtml of paragraph</p>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
textContent属性打印html元素中除标签之外的所有文本内容.它还可以打印所有空白区域和新线条.因此,为了获得没有空格和新行的文本,我使用了innerText属性,但它没有在title元素中打印文本,只是在p元素中打印了文本.为什么innerText属性不像我预期的那样工作?
ecmascript-5 ×10
javascript ×10
ecmascript-6 ×2
datetime ×1
es5-shim ×1
eval ×1
html ×1
node.js ×1
security ×1
static ×1