タグ付けされた質問 「javascript」

JavaScript(Javaと混同しないでください)は、クライアント側とサーバー側の両方のスクリプトで使用される、高レベルで動的なマルチパラダイムの弱く型付けされた言語です。ECMAScript、JavaScript、JScriptなどの一般的な実装に関する質問には、このタグを使用します。JSは通常、そのECMA従兄弟であるActionScriptを参照しません。

6
Coffeescriptの長所と短所は何ですか?[閉まっている]
もちろん、1つの大きな長所は、多くの場合にコードを短くする構文糖の量です。上http://jashkenas.github.com/coffee-script/印象的な例があります。一方、これらの例が複雑な現実世界のアプリケーションのコードを表していることには疑問があります。たとえば、私のコードでは、ベアオブジェクトに関数を追加するのではなく、プロトタイプに関数を追加します。さらに、プロトタイプ機能はユーザーから隠されており、慣用的なJavascriptではなく古典的なOOPを示唆しています。 配列内包表記の例は、私のコードでおそらく次のようになります。 cubes = $.map(list, math.cube); // which is 8 characters less using jQuery...

7
一貫したコードスタイルの実際の価値は何ですか
私は、顧客向けの新しいソリューションを実装するコンサルタントチームの一員です。クライアント側のコードベース(Reactおよびjavascript)のコードレビューの大部分を担当しています。 一部のチームメンバーが独自のコーディングパターンを使用して、スタイルだけで作者が誰であるかをランダムに選択できるようになっていることに気付きました。 例1(1回限りのインライン関数) React.createClass({ render: function () { var someFunc = function () { ... return someValue; }; return <div>{someFunc()}</div> } }); 著者は、someFuncに意味のある名前を割り当てることで、コードが読みやすくなると主張しています。関数をインライン化し、代わりにコメントを追加すると、同じ効果が得られると思います。 例2(非バインド関数) function renderSomePart(props, state) { return ( <div> <p>{props.myProp}</p> <p>{state.myState}</p> </div> ); } React.createClass({ render: function () { return <div>{renderSomePart(this.props, this.state)}</div>; } }); これは通常の方法です(状態と小道具を渡す必要がなくなります)。 React.createClass({ renderSomePart: function …

2
「時々オフライン」のWebアプリで使用するための一意で安全な識別子を生成するための戦略
ユーザーがオンラインとオフラインの両方で作業できるWebベースのプロジェクトがあり、クライアント側でレコードの一意のIDを生成する方法を探しています。ユーザーがオフライン(つまり、サーバーと通信できない)で機能し、一意であることが保証され、安全なアプローチが必要です。「安全」ということで、クライアントが重複したIDを(悪意のあるかどうかに関係なく)送信し、それによってデータの整合性が破壊されることを特に心配しています。 これがすでに解決された問題であることを願って、私はいくつかのグーグルをしてきました。特に本番システムで使用されているアプローチに関して、非常に決定的なものは見つかりませんでした。ユーザーが作成したデータのみにアクセスするシステムの例をいくつか見つけました(たとえば、複数のデバイスでアクセスするTodoリストですが、作成したユーザーのみがアクセスできます)。残念ながら、もう少し洗練されたものが必要です。私はここでいくつかの本当に良いアイデアを見つけましたが、それは私が物事がうまくいくと思っていた方法と一致しています。 以下は私の提案するソリューションです。 いくつかの要件 IDはグローバルに一意(または、システム内で少なくとも一意)である必要があります クライアント上で生成されます(つまり、ブラウザーのJavaScriptを介して) セキュア(上記およびその他の概要に従って) データは、作成していないユーザーを含む複数のユーザーが表示/編集できます。 バックエンドデータベース(MongoDBやCouchDBなど)に重大なパフォーマンスの問題を引き起こさない 提案されたソリューション ユーザーがアカウントを作成すると、サーバーによって生成され、システム内で一意であることがわかっているuuidが与えられます。このIDは、ユーザー認証トークンと同じであってはなりません。このIDをユーザーの「IDトークン」と呼びましょう。 ユーザーが新しいレコードを作成すると、javascriptに新しいuuidが生成されます(window.cryptoを使用して生成されます(使用可能な場合はこちらを参照)。このIDは、ユーザーがアカウントを作成したときに受け取った「IDトークン」と連結されます。この新しい複合ID(サーバー側IDトークン+クライアント側UUID)は、レコードの一意の識別子になりました。ユーザーがオンラインで、この新しいレコードをバックエンドサーバーに送信すると、サーバーは次のことを行います。 これを「挿入」アクション(更新や削除ではない)として識別します 複合キーの両方の部分が有効なuuidであることを検証します 複合IDの指定された「IDトークン」部分が現在のユーザーに対して正しいことを検証します(つまり、アカウントを作成したときにサーバーがユーザーに割り当てたIDトークンと一致します) すべてがcopaseticである場合、dbにデータを挿入します(id が既に存在する場合、誤って既存のレコードを更新しないように、「upsert」ではなく挿入を行うように注意してください) クエリ、更新、削除には特別なロジックは必要ありません。従来のアプリケーションと同じ方法で、レコードのIDを使用するだけです。 このアプローチの利点は何ですか? クライアントコードはオフラインで新しいデータを作成し、そのレコードのIDをすぐに知ることができます。クライアント上で一時IDが生成され、システムがオンラインのときに「最終」IDに交換される代替アプローチを検討しました。しかし、これは非常に脆い感じがしました。特に、更新が必要な外部キーを使用して子データを作成することを検討し始めたとき。IDが変更されたときに変更されるURLの処理は言うまでもありません。 IDをクライアント生成値とサーバー生成値の複合にすることにより、各ユーザーはサンドボックスにIDを効率的に作成します。これは、悪意のある/悪意のあるクライアントが行うことができる損害を制限することを目的としています。また、idの衝突はユーザーごとに発生し、システム全体にグローバルではありません。 ユーザーIDトークンはアカウントに関連付けられているため、IDは、認証されたクライアント(つまり、ユーザーが正常にログインした場所)によってのみユーザーサンドボックスで生成できます。これは、悪意のあるクライアントがユーザーの不正なIDを作成しないようにすることを目的としています。もちろん、ユーザー認証トークンが悪意のあるクライアントに盗まれた場合、悪いことをする可能性があります。しかし、認証トークンが盗まれると、アカウントはとにかく危険にさらされます。これが発生した場合、被害はシステム全体ではなく、侵害されたアカウントに限定されます。 懸念事項 このアプローチに関する私の懸念のいくつかを以下に示します これにより、大規模なアプリケーションに対して十分に一意のIDが生成されますか?これがIDの衝突を引き起こすと考える理由はありますか?javascriptはこれが機能するために十分にランダムなUUIDを生成できますか?window.cryptoはかなり広く利用可能であり、このプロジェクトはすでに合理的な最新のブラウザを必要としているようです。(この質問には、独自のSO質問があります) 悪意のあるユーザーがシステムを危険にさらす可能性のある抜け穴がありますか? 2つのuuidで構成される複合キーを照会するときに、DBのパフォーマンスを心配する理由はありますか。最高のパフォーマンスを得るには、このIDをどのように保存する必要がありますか?2つの別々のフィールドまたは単一のオブジェクトフィールド?Mongo対Couchに異なる「最良の」アプローチはありますか?連続していない主キーがあると、挿入時に顕著なパフォーマンスの問題が発生することがあります。主キーに自動生成された値を持ち、このIDを別のフィールドとして保存する方が賢明でしょうか?(この質問には、独自のSO質問があります) この戦略を使用すると、特定のレコードセットが同じユーザーによって作成されたことを簡単に判断できます(すべてのユーザーが同じ公開IDトークンを共有するため)。これに関する差し迫った問題はありませんが、必要以上に内部の詳細についての情報を漏らさない方が良いです。別の可能性は、複合キーをハッシュすることですが、それはそれが価値があるよりももっと面倒かもしれません。 ユーザーのID衝突が発生した場合、回復する簡単な方法はありません。クライアントは新しいIDを生成できたと思いますが、これは実際には発生しないはずのエッジケースでは多くの作業のようです。私はこれを未解決のままにするつもりです。 認証されたユーザーのみがデータを表示および/または編集できます。これは私のシステムにとって許容できる制限です。 結論 合理的な計画を超えていますか?この一部は、問題のアプリケーションの完全な理解に基づいた判断の呼び出しに帰着することを理解しています。

10
インラインスクリプトを避けるべき理由
最近、知識のある友人が私が立ち上げたウェブサイトを見て、「非常にクールなサイト、ソースコードのインラインスクリプトについての恥」などのコメントをしました。 私は間違いなく、インラインスクリプトが発生する場所を削除する立場にあります。私はそれが「悪いこと」であることを漠然と認識しています。私の質問は、インラインスクリプトの本当の問題は何ですか?重大なパフォーマンスの問題がありますか、それともほとんど良いスタイルの問題ですか?インラインスクリプティングの前線で即座にアクションを実行することを上司に正当化できますか?Webサイトにアクセスしてソースコードを覗いてみると、どのような要因が「うーん、ここでのプロフェッショナルな仕事」と言ってしまうでしょうか。 さて、その質問は執筆中に複数の質問に変わりました。しかし、基本的に、インラインスクリプティング-契約は何ですか?

8
パスワードの再利用を「保護」するために、送信する前にクライアントでパスワードをハッシュするWebページがほとんどないのはなぜですか(そしてサーバー上で再度ハッシュするのですか)。
インターネットにはログイン情報を必要とする多くのサイトがあり、パスワードの再利用を防ぐ唯一の方法は、サーバー上でパスワードがハッシュされるという「約束」です。 したがって、パスワードを再ハッシュするサーバーに送信する前に、クライアントコンピューターで(Javascriptを使用して)パスワードをハッシュするWebページを作成するのはどれくらい難しいでしょうか。理論的には、これは追加のセキュリティを提供しませんが、実際には、サーバーでパスワードをハッシュしない「不正サイト」から保護するために使用できます。


4
なぜ+は連結にとってそれほど悪いのですか?
JavaScriptの問題の1つは、文字列の連結に+[ 例 ]を使用しているということです。問題はを使用していないと言う人もいますが+、それは型強制です(前の例のコメントを参照)。ただし、厳密に型指定された言語では、連結と強制型に問題なく+を使用します。たとえば、C#の場合: int number = 1; MyObject obj = new MyObject(); var result = "Hello" + number + obj; // is equivalent to string result = "hello" + number.ToString() + obj.ToString(); では、なぜJavaScriptでの文字列の連結がそんなに大きな問題なのでしょうか?
44 javascript 

4
なぜC#開発者は括弧を開くのですか?[閉まっている]
私はここ数年のほとんどを主にC#とSQLで作業してきました。私がこれまでに取り組んできたすべてのプログラマーは、関数または制御フローステートメントの開始括弧を新しい行に配置する習慣がありました。そう ... public void MyFunction(string myArgument) { //do stuff } if(myBoolean == true) { //do something } else { //do something else } 特にif / elseステートメントでは、これがスペースの無駄であることに常に感銘を受けました。そして、C#の以降のバージョンには、次のような代替手段が存在することを知っています。 if(myBoolean == true) //do something on one line of code しかし、ほとんど誰も使用しませんでした。誰もが中括弧で改行をしました。 それから久しぶりにJavaScriptをやり直しました。私の記憶では、JavaScript開発者は以前とまったく同じ中かっこと改行を使用していましたが、ほとんどの開発者はすべての派手な新しいライブラリとものを使用して、宣言の後に開き中かっこを配置しました。 function MyJavaScriptFunction() { //do something } JavaScriptでクロージャーと関数ポインターを使用することが一般的になったため、多くのスペースを節約し、物事を読みやすくするため、この意味を理解できます。だから私はなぜそれがC#で完了したものとして見られなかったのだろうと思った。実際、Visual Studio 2013で上記のコンストラクトを試してみると、実際に再フォーマットされて、開き括弧が新しい行に追加されます。 今、私はコードレビューSEにこの質問を見た: https://codereview.stackexchange.com/questions/48035/questions-responses-let-me-tell-you-about-you これで私はJavaでそれを学んだ、A私があまり馴染みのない言語です。宣言の直後に中括弧を開くのは、最新のJavaScriptのように厳格であると考えられています。 …
44 java  c#  javascript  syntax 

5
典型的な「動的言語の間違い」を回避する方法は?
私は最近、膨大なユーザーベースから利益を得たいと思ったため、JavaScriptに数時間を費やしました。そうすることで、ほとんどの人が動的言語に起因するパターンに気付きました。物事は本当に迅速に機能しますが、コードが特定のサイズに達すると、一般的にタイプ、スペル、リファクタリングのエラーで多くの時間を無駄にします。コンパイラが通常私を免れるエラー。また、別のモジュールでタイプミスをしたばかりのときに、ロジックのエラーを探す必要はありません。 JavaScriptや他の動的に型付けされた言語に続く信じられないほどのことを考えると、私のアプローチに何か問題があると信じるようになりました。または、これはあなたが支払わなければならない価格ですか? もっと簡潔に言うと: 〜2000 LOCでJavaScript(またはその他の動的言語)プロジェクトにどのようにアプローチしますか? これらの間違いを防ぐためのツールはありますか?私はFacebookとJSHintによるフローを試みましたが、これは多少役立ちますが、タイプミスはキャッチしません。


3
DOMの何が悪いのですか?
DOMはひどいAPIであると言っている人々(特にCrockford)の声を聞き続けていますが、この声明を正当化するものではありません。ブラウザー間の不整合は別として、DOMがそれほど悪いと考えられる理由は何ですか?

7
外部JavaScriptの参照と自分のコピーのホスト
jQueryを使用するWebアプリがあるとします。必要なjavascriptファイルをWebサイトのファイルと一緒に自分のサーバーでホストするか、jQueryのCDN(例:http : //code.jquery.com/jquery-1.7.1.min.js)で参照することをお勧めします? 私は両方の長所を見ることができます: サーバー上にある場合、外部依存関係は1つ少なくなります。jQueryがダウンしたり、ホスティング構造などを変更した場合、私のアプリは壊れます。しかし、私はそのようなことはあまり起こらないと感じています。これを行う多くの小規模なサイトが必要であり、jQueryチームはそれらを壊さないようにしたいと思うでしょう。 それが私のサーバー上にある場合、それは誰かがセキュリティの問題を呼び出すことができる1つ少ない外部参照です 外部で参照されている場合、ファイルを提供するための帯域幅を心配する必要はありません(それほど多くないことは知っていますが)。 外部で参照されており、すべてのファイルの独自のコピーを必要とする多くのサーバーにこのWebサイトを展開している場合、コピー/更新する必要があるファイルは1つ少なくなります。

8
HTML5の使用を開始するにはどうすればよいですか?[閉まっている]
HTML5を学習するための推奨ワークフローは何ですか?どのツールをインストールする必要がありますか?どのSDKですか?どこから始めれば?テスト方法 デバッグ方法 私は何を読みますか? 「HTML5開発」と呼ばれることが多いのは、実際にはHTML、CSS、JSなどの混合物であることを理解していますが、より大きなプロジェクトがメモ帳で開発されているとは思いません。だからこそ、ワークフローに関するヒントやコツを明らかにするようお願いしています。
42 javascript  html  css  ajax  html5 

9
カスタムプロパティを持つJSブール値は悪い習慣ですか?
JSでは、カスタムプロパティを持つブール値を返すことができます。例えば。Modernizrは、ビデオサポートのためにテストするときに返すtrueかfalseが、返されたブール(ブール値は、JSでのファーストクラスのオブジェクトである)の形式がサポートされているものを指定するプロパティがあります。最初は少し驚きましたが、そのアイデアが好きになり始め、なぜそれが控えめに使用されているのか疑問に思い始めましたか? 基本的に何かが真であるか偽であるかを知りたいすべてのシナリオを扱うエレガントな方法のように見えますが、カスタム戻りオブジェクトを定義することなく、または準備されたコールバック関数を使用せずに定義できる追加情報に興味があるかもしれませんより多くのパラメーターを受け入れます。この方法により、より複雑なデータを返す能力を損なうことなく、非常に普遍的な関数シグネチャを保持できます。 私が想像できる3つの議論があります: インターフェイスが明確でトリッキーではない方がおそらく良い場合、それは少し珍しい/予期しないことです。 これはストローマンの議論かもしれませんが、それは少しエッジケースであるため、JSオプティマイザー、uい、VMで静かに裏目に出るか、または言語仕様のマイナーな変更などで静かに裏目に出ることを想像できます。 より正確な、簡潔で、明確で一般的な-まったく同じ方法があります。 だから私の質問は、追加のプロパティでブール値を使用することを避ける強力な理由はありますか?彼らはトリックまたは御treat走ですか? ねじれ警告をプロットします。 上記は元気な質問です。Matthew Crumleyとsenevoldsenの両方が指摘したように、それは誤った(偽の?)前提に基づいています。優れたJSの伝統では、Modernizrが行うことは言語のトリックであり、汚いものです。要するに、falseに設定された場合、プロップ(サイレントに失敗する)を追加しようとしてもfalseに設定されるプリミティブboolを持つJSと、カスタムプロップを持つことができるが、オブジェクトであるブールオブジェクトは常に真実です。Modernizrは、ブール値falseまたは真実のブール値オブジェクトを返します。 私の元々の質問は、トリックの動作が異なると想定していたため、最も一般的な回答は、コーディング標準の側面(完全に有効)を扱っています。しかし、私はトリック全体を暴く答えが最も役立つと思います(そして、メソッドを使用することに対する究極の引数も)ので、私はそれらの1つを受け入れています。すべての参加者に感謝します!

7
リンクする代わりにスタイル/スクリプトをHTMLに埋め込むのはなぜですか?
CSSファイルとJavaScriptファイルを連結してHTTPリクエストの数を減らし、パフォーマンスを向上させます。結果は次のようなHTMLです。 <link rel="stylesheet" href="all-my-css-0fn392nf.min.css"> <!-- later... --> <script src="all-my-js-0fn392nf.min.js"></script> これをすべて行うためのサーバー側/ビルドロジックがある場合は、さらに一歩進めて、連結されたスタイルとスクリプトをHTMLに埋め込みましょう。 <style>.all{width:100%;}.my{display:none;}.css{color:white;}</style> <!-- later... --> <script>var all, my, js;</script> HTTPリクエストは2つ少なくなりましたが、実際にはこの手法を見たことはありません。何故なの?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.