小编Lia*_*eng的帖子

关于javascript的排序功能

背景:

根据某些任务的需要,我需要一个简单的排序功能.为简单起见,我编写了另一个函数来将内置排序函数包装为:

function sortBy(obj, extra, func){
    if(typeof func == 'function'){
        f = func;
    } else if(typeof extra != 'function'){
        eval('function f(a, b, ai, bi, e){return ' + func + '}');
    } else {
        var f = extra;
        extra = null;
    }

    var res = [];
    for(var i in obj){
        if(obj.hasOwnProperty(i)){
            obj[i]._k_ = i;
            res.push(obj[i]);
        }
    }

    res.sort(function(a, b){
        if(f(a, b, a._k_, b._k_, extra)){
            return 1;
        } else {
            return -1;
        }
    })

    return res;
}
Run Code Online (Sandbox Code Playgroud)

我的尝试是:

  1. 可以直接对对象进行排序
  2. 将原始对象保留为哈希表
  3. 允许一些简单的语法

例如, …

javascript sorting

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

在IE8中非常奇怪.定义的变量被识别为'undefined'

当我试图启用lib(Beard.js)来支持javascript模板引擎Haml时,出现了一个非常奇怪的问题.

Haml无法正确加载.我查了下代码,发现Haml从未被加载到页面中.经过大量的尝试和失败,我碰巧使它成功.我发现的奇怪之处是:

在起源Haml lib中,它是:

var Haml;

(function(){
    ...

    Haml = function(){ ... }

    ...
}());
Run Code Online (Sandbox Code Playgroud)

我将代码更改为:

var Haml;

(function(){
    ...

    window.Haml = function(){ ... }

    ...
}());
Run Code Online (Sandbox Code Playgroud)

然后它的工作..

为什么???Haml是否应该在全球范围内自动识别?

环境 - IE8
Haml.js - https://github.com/creationix/haml-js
Bear.js - https://github.com/jspopisno1/Beard

--------------更新---------------

在Haml.js中,它是:

var Haml;

(function(){
    ...

    Haml = function Haml(){ ... }

    ...
}());
Run Code Online (Sandbox Code Playgroud)

我想在javascript中,语句"function Haml(){}"使Haml成为局部变量.但是,为什么Haml可以在Firefox和Chrome中正确加载????

javascript internet-explorer-8

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

标签 统计

javascript ×2

internet-explorer-8 ×1

sorting ×1