功能性 javascript 和網絡瀏覽器 javascript 版本 (Functional javascript and web browser javascript versions)


問題描述

功能性 javascript 和網絡瀏覽器 javascript 版本 (Functional javascript and web browser javascript versions)

I've recently been looking at functional programming with Javascript, to which I'm a noob. 

While writing some 'map', 'reduce' and 'find' functions I discover that as of JS version 1.5 these functions are already available (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array) 

I am however confused as next to these functions (i.e reduce) it says 'requires javscript 1.8' - but its in the 1.5 docs? How can this be ?

Also does anyone have a list, of all the major browsers, against which version of javascript they are running ? 

If I wanted to use functional programming in my web project which approach should I be using ? Should I include a library of functions or can I rely on the browsers implementations ?


參考解法

方法 1:

You won't be able to rely on the built-in implementations of these methods unless you know your userbase is 100% firefox 3.

However, you can code your implementations with the idea that they might already exist, as seen in the docs

if (!Array.prototype.map)
{
  Array.prototype.map = function(fun /*, thisp*/)
  {
    var len = this.length >>> 0;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        res[i] = fun.call(thisp, this[i], i, this);
    }

    return res;
  };
}

方法 2:

http://en.wikipedia.org/wiki/JavaScript#Versions

I think the biggest issue is that these changes are unofficial, and the ecmascript standard (on which javascript is based) has been bogged down in discussions for years.

The good news is that ECMAScript 5 is finally on a good path, they'll probably have a final spec by the end of the year, and all browser vendors will likely commit to implementing it during 2010. So, by the end of 2010 we should get map/reduce on the array object.

You can read the draft spec here:

http://www.ecma-international.org/publications/files/drafts/tc39-2009-025.pdf

(3 meg PDF file)

(by 32423hjh32423Peter BaileyJoeri Sebrechts)

參考文件

  1. Functional javascript and web browser javascript versions (CC BY-SA 3.0/4.0)

#functional-programming #Browser #javascript






相關問題

有沒有辦法在 C 中進行柯里化? (Is there a way to do currying in C?)

Scala 的產量是多少? (What is Scala's yield?)

功能性 javascript 和網絡瀏覽器 javascript 版本 (Functional javascript and web browser javascript versions)

從元組列表中獲取唯一路徑 (Getting Unique Paths from list of tuple)

用函數作為參數定義函數 (Defining a function with a function as an argument)

如何使用函數 VB.NET 插入數據庫? (How to use Function VB.NET Insert To Database?)

Python中列表的模式匹配 (Pattern matching of lists in Python)

如何在haskell中顯示派生樹? (how can i show a derivation tree in haskell?)

編寫一個可任意調用次數的 curried javascript 函數,該函數在最後一次函數調用時返回一個值 (Writing a curried javascript function that can be called an arbitrary number of times that returns a value on the very last function call)

我應該總是給我的函數一個返回值嗎? (Should I always give a return value to my function?)

如何在 JavaScript 中實現動態回調參數 (How can I achieve dynamic callback arguments in JavaScript)

Haskell 是否有一個函數可以創建將函數應用於列表的每個變體 (Haskell Is there a function for creating every variation of applying a function to a list)







留言討論