2017-03-04 30 views
0

問題の原因は、現在使用しているArray.prototype.find()メソッドが現在のバージョンのGoogle Apps Scriptではサポートされていない可能性があることを私に知らせるスクリプトをデバッグしようとしていることです。 2017年3月4日)。ウェブブラウザでサポートされているJavaScriptのバージョンを確認するにはどうすればよいですか?

// ran this locally on Chrome version 56.0.2924.87 (64-bit) 
// result is 3 
var t = [1,2,3,4]; 
var x = t.find(function(v) { 
    return v == 3; 
}); 
document.write(x); 

==========

// ran this on Google Apps Script (whatever the version is as of March 4th, 2017) 
// attempting to run this function produces the error: "TypeError: Cannot find function find in object 1,2,3,4." 
var t = [1,2,3,4]; 
var x = t.find(function(v) { 
    return v == 3; 
}); 
Logger.log(x); 

私は描くことができる唯一の結論:私はこれを疑う理由は、私は2つの異なる環境で実行してみました次のコードでありますこの実験から、Google Apps Scriptは古いバージョンのJavaScriptに基づいていることが主な質問です。どのバージョンの技術(JavaScript、HTML、CSSなど)がサポートされているかChromeウェブブラウザとGoogle Apps Scriptによってどのように大きな変化があったのか、私はどのようにして自分に情報を伝えることができますか

答えて

1

私が見つけた(そして良いものです)リソースはthis linkです。

これはブラウザのサポートだけでなく、モバイルとトランスバータのサポートも提供しています。また、JavaScriptのバージョン(将来のバージョンも)を切り替えて、ブラウザの進行状況を知ることができます。私はそれがGoogle Apps Scriptをカバーしているとは思わない。

このサイトには機能が満載されています。私のお気に入りの1つは、左側の言語機能をクリックし、その機能をサポートするために必要なさまざまな側面を見ていることです。それは適合性を確認するコードサンプルを提供します。

私が定期的に参照する素晴らしいリソースです。

特定の環境で何が起こっているのかを実行時感覚で確認したい場合は、このリンクで提供されている機能テストを独自のテストスクリプトにコピーし、それを実行して、特定の機能。

たとえば、ES6機能の基本的なサポート、つまりデフォルトの関数パラメータをテストするとします。私たちは、「デフォルトの関数のパラメータ」をクリックしてから、我々はこのコードのスニペットを取得する「基本機能」の右にある円の中に少し「C」をクリックした場合:

return (function (a = 1, b = 2) { return a === 3 && b === 2; }(3)); 

をすべてのコードスニペットをすることを意図していますユニットテストとして実行され、サポートされている場合はtrueを返し、そうでない場合はfalseを返します。お使いの環境で使用すると、サポートでこの機能を実行しているかどうかを教えてくれます

function testDefaultParameters() { 
    return (function (a = 1, b = 2) { return a === 3 && b === 2; }(3)); 
}; 

if (!testDefaultParameters()) { 
    // log or polyfill or ... 
} 

だからあなたは、このようないくつかのコードが含まれている場合。

新しい言語構造をコードベースに追加するときにこれらを追加します。これにより、さらにサポートを追加するか、おそらくその構造を使用するかどうかをすぐに検出できます。

+0

素晴らしいリソース!共有していただきありがとうございます。 – Manuel

2

これは最初は無回答と思われるかもしれませんが、間違った質問をしているからです。 "どのバージョンのJavaScript"がサポートされているかを尋ねるべきではありませんが、 "の機能はです。この JavaScript環境で利用できます。"これは実行時にテストできます。 (環境はES6の一部をサポートする可能性があり、ES6の一部をサポートしない可能性があるため、これらの環境は純粋にES5でもES6でもない - 単純な「Google Appsはバージョン___を使用する」という回答はない。)

機能のテストは、ポータブルJavaScriptを書くための標準的な方法であり、エラーを投げるのではなく、undefined が返されていない何かを求めているので、あなたは非常に簡単にあなたに利用できるものを見ることができます。例えば

if (Array.prototype.find) { 
    // Arrays have find() 
} else { 
    // Arrays do not... maybe polyfill an implementation? 
} 

いくつかのいわゆる「ネイティブオブジェクト」(ない純粋なJavaScriptのオブジェクトが、埋め込み環境によって提供されるもの)はこのように動作しない場合があります。有名なことに、存在しないプロパティにアクセスすると、一部のブラウザのDOMオブジェクトがスローされます。 (しかし、jQueryのようなライブラリを持っているとDOMを直接操作するのはなぜですか?)

+0

ありがとう、これは知っていると非常に役に立ちました。 しかし、それぞれのメソッドを1つ1つずつテストするのではなく、ある種の環境で一度にサポートされている機能をチェックする方法があるかどうか、あるいはif-and- elseステートメントたとえば、Array.prototypeを変数に保存し、for-inループを使用してそのプロパティを表示しようとしましたが、これは画面に何も印刷しません。オブジェクトの長さ(obj.length)をチェックすると、長さ0。 – Manuel

関連する問題