所以Safari和Chrome已经开始尝试实现一些ES5的东西了.例如,Object.create就在其中.
如果有一个网站显示浏览器的进展,你们有没有人知道吗?ATM我需要使用Object.freeze,并希望看到支持哪些浏览器(如果有的话).
我正在从依赖jQuery过渡到在AngularJS中构建应用程序.我们建议在一些地方,以不混合jQuery和角码.
我想念的一件事是数组的jQuery $ .map函数.我知道这可以使用本机Javascript 映射函数重写,但并未在所有浏览器中实现(特别是IE <v9).
那么,是否有一个Angular等价物,或者我应该回到写作for (var x = 0; x < foo; x += 1) {...}所以我可以停止包含jQuery?
更新有时您只需知道要搜索的内容即可.Bergie说'寻找polyfills'.这是一个参考指南(来自Modernizr工作人员),用于在旧版浏览器上使用现代代码的大量资源:HTML5 Cross Browser Polyfills
在我写这篇文章时,ECMAScript 5正处于最终草案中; 它是由于包含一个严格模式,它将阻止您使用eval和其他限制分配给全局对象.(John Resig的文章是一个很好的介绍.)
通过在文件(或函数)的顶部包含字符串"use strict"来触发这种神奇的保密模式.但是,在旧环境中,"use strict"是一种无操作.如果你添加"use strict"并且不在严格的环境中测试它,你可能会留下一个非常严格的代码的定时炸弹,当它真正遇到严格的环境时它会破坏.
哪些环境实际上尊重"使用严格"?
我不是在问这是否合适:
Object.prototype.method = function(){};
Run Code Online (Sandbox Code Playgroud)
几乎每个人都认为这是邪恶的,因为它会混乱for(var i in obj).
忽略
Object.defineProperty)假设你有一些非常有用的方法,这被认为是错误的/不道德的吗?
Object.defineProperty(Object.prototype, 'methodOnSteriods',{
value: function(){ /* Makes breakfast, solves world peace, takes out trash */ },
writable: true,
configurable: true,
enumerable: false
});
Run Code Online (Sandbox Code Playgroud)
如果你认为上述内容是不道德的,为什么他们甚至会首先实现这个功能呢?
ES5有一个可枚举的标志.例
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor
, pd = getOwnPropertyDescriptor(Object.prototype, "toString");
assert(pd.enumerable === false, "enumerability has the wrong value");
Run Code Online (Sandbox Code Playgroud)
通过使用shimmed来获取Object.keys和Object.getOwnPropertyNames过滤掉新的非可枚举属性,可以实现部分实现Object.defineProperty.
这允许属性不可枚举.这显然意味着实例
for (var key in {}) {
assert(key !== "toString", "I should never print");
}
Run Code Online (Sandbox Code Playgroud)
这允许我们添加属性来说Object.prototype(例子)
Object.defineProperty(Object.prototype, "toUpperCaseString", {
value: function toUpperCaseString() {
return this.toString().toUpperCase();
},
enumerable: false
});
for (var key in {}) {
assert(key !== "toUpperCaseString", "I should never print");
}
console.log(({}).toUpperCaseString()); // …Run Code Online (Sandbox Code Playgroud) 如果您正在使用模块模式并具有以下内容:
(function () {
"use strict";
// this function is strict...
}());
Run Code Online (Sandbox Code Playgroud)
并使用Google Closure Compiler编译代码,该"use strict";指令不会使其进入编译文件.
那么如何防止Closure Compiler删除ES5/strict指令呢?
(注意,我不想使用强制执行ES5 /严格模式的其他模式,即简单地将"use strict";添加到编译文件的第一行.我想使用此处所述的模块模式.)
javascript google-closure google-closure-compiler ecmascript-5
基准:
不变量:
var f = function() { };
var g = function() { return this; }
Run Code Online (Sandbox Code Playgroud)
测试:
下面按预期速度顺序排列
new f;g.call(Object.create(Object.prototype));new (function() { })(function() { return this; }).call(Object.create(Object.prototype));实际速度:
new f;g.call(Object.create(Object.prototype));(function() { return this; }).call(Object.create(Object.prototype));new (function() { })问题:
f和g内联匿名函数时.为什么new(测试4.)测试更慢?更新:
具体是什么导致new要慢时f和g内联.
我对ES5规范的引用或对JagerMonkey或V8源代码的引用感兴趣.(请随意链接JSC和Carakan源代码.哦,如果他们愿意,IE团队可以泄漏Chakra源代码).
如果您链接任何JS引擎源,请解释它.
我正在将React代码转换为typescript,tsconfig中的目标是es5.
在IE 11中运行我收到错误"Promise is undefined"
我知道我需要填充,但如何?
我没有使用巴别塔.
以下是我的Webpack.config
var webpack = require("webpack");
var Promise = require('es6-promise').Promise;
var paths = require('./config/paths');
var HtmlWebpackPlugin = require('html-webpack-plugin');
//var InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin');
var AureliaWebpackPlugin = require('aurelia-webpack-plugin');
var publicPath = '/';
var publicUrl = '';
module.exports = {
entry: {
app: [
'core-js/fn/promise',
'./Generated Files/app.js'
],
vendor: paths.vendorPath,
},
output: {
path:__dirname + "/dist",
filename: 'bundle.js',
publicPath: publicPath
},
devtool: '#source-map',
resolve: {
extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js']
},
module: {
loaders: [ …Run Code Online (Sandbox Code Playgroud) 不知怎的,这不是50年编程语言发展的高潮:
throw "My exception message here";
Run Code Online (Sandbox Code Playgroud)
在Javascript中执行异常的正确方法是什么呢?
它们可以被识别(instanceof)
除默认消息和堆栈跟踪外,它们还可以携带其他有效负载
它们"子类化"基类Exception,因此调试控制台等可以提取有关异常的有意义信息
可能的嵌套异常(将异常转换为另一个异常):如果需要捕获异常并重新抛出新异常,则会保留orignal堆栈跟踪,并且可以通过调试工具进行有意义的读取
他们遵循Javascript最佳实践
我正在节点中写一个"类"
// mymodule/index.js
function MyClass() {}
MyClass.prototype.method1 = function() {..}
Run Code Online (Sandbox Code Playgroud)
通常我做
module.exports = MyClass
Run Code Online (Sandbox Code Playgroud)
但我希望我的课程可用于两种语法
var MyClass = require('mymodule')
Run Code Online (Sandbox Code Playgroud)
和
import {MyClass} from 'mymodule'
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
ecmascript-5 ×10
javascript ×10
ecma262 ×2
angularjs ×1
ecmascript-6 ×1
emulation ×1
exception ×1
jquery ×1
polyfills ×1
reactjs ×1
strict ×1
typescript ×1
v8 ×1