标签: ecmascript-5

将 CommonJS 模块导入 ESM 语法

我正在努力了解如何将 CommonJS 模块导入 ESM 语法。我目前正在尝试与图书馆合作url-metadataurl-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 中的模块加载,但我仍然有些困惑,不知道执行此操作的正确方法是什么以及为什么。

javascript node.js ecmascript-5 ecmascript-6

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

为什么EcmaScript 5严格模式会限制标识符"eval"

根据规范(附件C),严格模式代码几乎不能做任何可能使用名称分配任何标识符的内容 eval.我可以理解,人们可能想限制使用实际eval功能,但我不明白限制使用名称的目的是什么?

javascript security eval ecmascript-5

4
推荐指数
2
解决办法
849
查看次数

如何获取JavaScript类的名称

我们来看下面的示例代码:

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规范中至少有一些新功能可以提供对类名的访问?

javascript ecmascript-5

4
推荐指数
1
解决办法
5244
查看次数

JavaScript:测试未定义值的变量; 测试对象是否是数组

  1. 有没有之间的差异typeof value === "undefined"value === undefined

  2. 为什么Array.isArray()在ECMAScript 5中需要JavaScript ?我不能只是调用value instanceof Array来确定给定变量是否是一个数组?

javascript ecmascript-5

4
推荐指数
1
解决办法
2039
查看次数

什么是ECMAScript"本机对象"?

根据ECMA-262的原生物体

ECMAScript实现中的对象,其语义完全由此规范定义,而不是由主机环境定义

内置对象定义为

由ECMAScript实现提供的对象,独立于主机环境,在ECMAScript程序执行开始时出现.

附注意

标准内置对象在本规范中定义,ECMAScript实现可以指定和定义其他对象. 每个内置对象都是本机对象.

如果ECMA-262规范完全定义了本机对象而不是主机环境,并且ECMAScript实现可以指定和定义新的内置对象,那么这些新的内置对象如果不是本机对象又是怎么回事?完全由ECMA-262规范定义?

我错过了什么?

javascript ecmascript-5

4
推荐指数
1
解决办法
868
查看次数

奇怪的输出[97,98] .map(String.fromCharCode)

这按预期工作

[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 ecmascript-5

4
推荐指数
1
解决办法
722
查看次数

JavaScript日期函数在Firefox浏览器中返回"Date {Invalid Date}"

面对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 datetime unobtrusive-javascript ecmascript-5

4
推荐指数
1
解决办法
5997
查看次数

es5-shim和underscore.js?

我的JavaScript项目中有es5-shim.jsunderscore.js.

ES5-shim.js只需添加一些JavaScript原生功能,如reducesome对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的功能?

javascript ecmascript-5 underscore.js es5-shim

4
推荐指数
1
解决办法
2759
查看次数

从静态方法调用ES5类方法

我想从没有实例调用的静态函数调用内部函数,如下所示:

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,因为它不是完全直截了当的.

javascript static ecmascript-5

4
推荐指数
1
解决办法
9380
查看次数

为什么html元素的innerText属性只显示body元素的innerText?

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属性不像我预期的那样工作?

html javascript ecmascript-5 ecmascript-6

4
推荐指数
1
解决办法
189
查看次数