少了1.4 string.trim()ie8崩溃

时间:2013-09-25 15:03:23

标签: javascript css less

我在本地环境中使用less.js。我有IE8 + less.js(1.4.1)+ es5-shim.js的问题。当我包括es5-shim本机ie8崩溃时。我检查并做了一些测试,因为在less.js中使用了string.trim()函数。当我修改修剪功能以返回未修剪的字符串ie8不会崩溃但现在脚本无法识别mixins等。也许有人有一些解决方案吗?

1 个答案:

答案 0 :(得分:1)

如果你唯一使用es5-shim的是修剪填充物,你可以尝试不使用es5-shim并包含这个替代的polyfill并查看它是否有效

''.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,'')});

也就是说,我目前正在使用ES-5 15.5.4.20String.trim()版本v1.4.2的es5-shim版本,而且它们在IE8中很好地协同工作 - 。

如果你想比较实现,我正在运行的版本有这个代码......

// ES5 15.5.4.20
// http://es5.github.com/#x15.5.4.20
var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
    "\u2029\uFEFF";
if (!String.prototype.trim || ws.trim()) {
    // http://blog.stevenlevithan.com/archives/faster-trim-javascript
    // http://perfectionkills.com/whitespace-deviations/
    ws = "[" + ws + "]";
    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
        trimEndRegexp = new RegExp(ws + ws + "*$");
    String.prototype.trim = function trim() {
        if (this === void 0 || this === null) {
            throw new TypeError("can't convert "+this+" to object");
        }
        return String(this)
            .replace(trimBeginRegexp, "")
            .replace(trimEndRegexp, "");
    };
}