JavaScript に関するヒント

Jan 16, 2017 pm 01:40 PM

この記事では主に JavaScript のヒントに関連する情報を紹介します。必要な方は、プログラミング能力を向上させるためにこれらの短くて実用的な JavaScript のヒントを提供していただければ幸いです。

ブール値を変換するには !! 演算子を使用します

場合によっては、変数が存在するかどうかを確認したり、値が有効な値を持っているかどうかを確認し、存在する場合は true 値を返す必要があります。このような検証を行うには、非常に便利で簡単な !! 演算子を使用できます。 !!variable を使用して変数を検出できます。変数の値が 0、null、" "、未定義、または NaN の場合は false を返し、それ以外の場合は true を返します。たとえば、次の例:

function Account(cash) {
    this.cash = cash;
    this.hasMoney = !!cash;
}
var account = new Account(100.50);
console.log(account.cash); // 100.50
console.log(account.hasMoney); // true
var emptyAccount = new Account(0);
console.log(emptyAccount.cash); // 0
console.log(emptyAccount.hasMoney); // false
ログイン後にコピー

この例では、account.cash の値が 0 より大きい限り、account.hasMoney によって返される値は true です。

文字列を数値に変換するには + を使用します

このトリックは非常に簡単で、文字列データを数値に変換できますが、それ以外の場合は NaN を返します。次の例:

function toNumber(strNumber) {
    return +strNumber;
}
console.log(toNumber("1234")); // 1234
console.log(toNumber("ACB")); // NaN
ログイン後にコピー

これは Date にも機能します。この場合、タイムスタンプ番号を返します:

console.log(+new Date()) // 1461288164385
ログイン後にコピー

条件付き

このようなコードがある場合:

if (conected) {
    login();
}
ログイン後にコピー

変数の省略形も使用できます。たとえば、上記の例では、次のように省略できます:

conected && login();
ログイン後にコピー

オブジェクトにいくつかのプロパティまたは関数が存在する場合、次のコードに示すように、この検出を行うこともできます。 :

user && user.login();
ログイン後にコピー

|| 演算子

の使用には、ES6 のデフォルトパラメータの機能があります。古いブラウザでこの機能をエミュレートするには、|| 演算子を使用し、2 番目のパラメータとしてデフォルト値を渡します。最初のパラメータが false を返した場合、2 番目の値はデフォルト値とみなされます。次の例を見てみましょう:

function User(name, age) {
    this.name = name || "Oliver Queen";
    this.age = age || 27;
}
var user1 = new User();
console.log(user1.name); // Oliver Queen
console.log(user1.age); // 27
var user2 = new User("Barry Allen", 25);
console.log(user2.name); // Barry Allen
console.log(user2.age); // 25
ログイン後にコピー

ループ内で array.length をキャッシュする

この手法は非常に簡単ですが、大規模な配列ループを処理する場合、パフォーマンスへの影響は非常に大きくなります。基本的に、誰もが次のように同期的に反復する配列を作成します。

for(var i = 0; i < array.length; i++) {
    console.log(array[i]);
}
ログイン後にコピー

小さい配列の場合はこれで問題ありません。大きい配列を扱う場合、このコードは反復ごとに再初期化されます。これにより、多少の遅延が発生します。この現象を回避するには、array.length をキャッシュにすることができます:

var length = array.length;
for(var i = 0; i < length; i++) {
    console.log(array[i]);
}
ログイン後にコピー

次のように書くこともできます:

for(var i = 0, length = array.length; i < length; i++) {
    console.log(array[i]);
}
ログイン後にコピー

オブジェクト内の属性を検出する

いくつかの属性が存在するかどうかを検出する必要がある場合は、未定義の関数の実行を避けてくださいまたは属性、このちょっとしたトリックは非常に便利です。クロスブラウザー コードをカスタマイズする予定がある場合にも、このトリックを使用するとよいでしょう。たとえば、document.querySelector() を使用して ID を選択し、IE6 ブラウザと互換性を持たせたいとします。しかし、この関数は IE6 ブラウザには存在しないため、この関数が存在するかどうかをこの演算子を使用して検出するのは困難です。次の例のように、非常に便利です:

if (&#39;querySelector&#39; in document) {
    document.querySelector("#id");
} else {
    document.getElementById("id");
}
ログイン後にコピー

この例では、querySelector 関数がドキュメントに存在しない場合、 docuemnt.getElementById("id") が呼び出されます。

配列の最後の要素を取得します

Array.prototype.slice(begin, end) は、begin と end の間の配列要素を取得するために使用されます。終了パラメータを設定しない場合は、配列のデフォルトの長さの値が終了値として使用されます。しかし、この関数がパラメータとして負の値も受け入れることができることを知らない学生もいるかもしれません。 begin の値として負の値を設定すると、配列の最後の要素を取得できます。例:

var array = [1,2,3,4,5,6];
console.log(array.slice(-1)); // [6]
console.log(array.slice(-2)); // [5,6]
console.log(array.slice(-3)); // [4,5,6]
ログイン後にコピー

配列の切り捨て

この小さなトリックは主に配列のサイズをロックするために使用され、配列内の一部の要素を削除するために使用すると非常に便利です。たとえば、配列に 10 個の要素があるが、最初の 5 個の要素だけが必要な場合は、array.length=5 で配列を切り詰めることができます。この例のように:

var array = [1,2,3,4,5,6];
console.log(array.length); // 6
array.length = 3;
console.log(array.length); // 3
console.log(array); // [1,2,3]
ログイン後にコピー

すべて置き換える

String.replace()函数允许你使用字符串或正则表达式来替换字符串,本身这个函数只替换第一次出现的字符串,不过你可以使用正则表达多中的/g来模拟replaceAll()函数功能:

var string = "john john";
console.log(string.replace(/hn/, "ana")); // "joana john"
console.log(string.replace(/hn/g, "ana")); // "joana joana"
ログイン後にコピー

合并数组

如果你要合并两个数组,一般情况之下你都会使用Array.concat()函数:

var array1 = [1,2,3];
var array2 = [4,5,6];
console.log(array1.concat(array2)); // [1,2,3,4,5,6];
ログイン後にコピー

然后这个函数并不适合用来合并两个大型的数组,因为其将消耗大量的内存来存储新创建的数组。在这种情况之个,可以使用Array.pus().apply(arr1,arr2)来替代创建一个新数组。这种方法不是用来创建一个新的数组,其只是将第一个第二个数组合并在一起,同时减少内存的使用:

var array1 = [1,2,3];
var array2 = [4,5,6];
console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];
ログイン後にコピー

将NodeList转换成数组

如果你运行document.querySelectorAll(“p”)函数时,它可能返回DOM元素的数组,也就是NodeList对象。但这个对象不具有数组的函数功能,比如sort()、reduce()、map()、filter()等。为了让这些原生的数组函数功能也能用于其上面,需要将节点列表转换成数组。可以使用[].slice.call(elements)来实现:

var elements = document.querySelectorAll("p"); // NodeList
var arrayElements = [].slice.call(elements); // Now the NodeList is an array
var arrayElements = Array.from(elements); // This is another way of converting NodeList to Array
ログイン後にコピー

数组元素的洗牌

对于数组元素的洗牌,不需要使用任何外部的库,比如Lodash,只要这样做:

var list = [1,2,3];
console.log(list.sort(function() { Math.random() - 0.5 })); // [2,1,3]
ログイン後にコピー

转换数值的更加的方法

将字符串转换为数字是非常常见的。最简单和最快的(jspref)的方式来实现,将使用+(加)算法。

var one = &#39;1&#39;;
var numberOne = +one; // Number 1
ログイン後にコピー

你也可以使用-(减号)算法的转换类型并且变成负数值。

var one = &#39;1&#39;;
var negativeNumberOne = -one; // Number -1
ログイン後にコピー

返回对象的函数能够用于链式操作

当创建面向对象的JavaScript对象的function时,函数返回一个对象将能够让函数可链式的写在一起来执行。

function Person(name) {
this.name = name;
this.sayName = function() {
console.log("Hello my name is: ", this.name);
return this;
};
this.changeName = function(name) {
this.name = name;
return this;
};
}
var person = new Person("John");
person.sayName().changeName("Timmy").sayName();
//Hello my name is: John
//Hello my name is: Timmy
ログイン後にコピー

给回调函数传递参数

在默认情况下,你无法将参数传给回调函数,如下:

function callback() {
console.log(&#39;Hi human&#39;);
}
document.getElementById(&#39;someelem&#39;).addEventListener(&#39;click&#39;, callback);
ログイン後にコピー

你可以采取JavaScript闭包的优点来给回调函数传参,案例如下:

function callback(a, b) {
return function() {
console.log(&#39;sum = &#39;, (a+b));
}
}
var x = 1, y = 2;
document.getElementById(&#39;someelem&#39;).addEventListener(&#39;click&#39;, callback(x, y));
ログイン後にコピー

什么是闭包呢?闭包是指一个针对独立的(自由)变量的函数。换句话说,闭包中定义的函数会记住它被创建的环境。了解更多请参阅MDN所以这种方式当被调用的时候,参数X/Y存在于回调函数的作用域内。

另一种方法是使用绑定方法。例如:

var alertText = function(text) {
alert(text);
};
document.getElementById(&#39;someelem&#39;).addEventListener(&#39;click&#39;, alertText.bind(this, &#39;hello&#39;));
ログイン後にコピー

提升

理解提升将帮助你组织你的function。只需要记住,变量声明和定义函数会被提升到顶部。变量的定义是不会的,即使你在同一行中声明和定义一个变量。此外,变量声明让系统知道变量存在,而定义是将其赋值给它。

function doTheThing() {
// 错误: notDeclared is not defined
console.log(notDeclared);
// 输出: undefined
console.log(definedLater);
var definedLater;
definedLater = &#39;I am defined!&#39;
// 输出: &#39;I am defined!&#39;
console.log(definedLater)
// Outputs: undefined
console.log(definedSimulateneously);
var definedSimulateneously = &#39;I am defined!&#39;
// 输出: &#39;I am defined!&#39;
console.log(definedSimulateneously)
// 输出: &#39;I did it!&#39;
doSomethingElse();
function doSomethingElse(){
console.log(&#39;I did it!&#39;);
}
// 错误: undefined is not a function
functionVar();
var functionVar = function(){
console.log(&#39;I did it!&#39;);
}
}
ログイン後にコピー

为了使事情更容易阅读,在函数作用域内提升变量的声明将会让你明确该变量的声明是来自哪个作用域。在你需要使用变量之前定义它们。在作用域底部定义函数,确保代码清晰规范。

希望这些小技巧能在工作中帮助你解决一些麻烦,对你有所帮助。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? 独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? Mar 18, 2025 pm 03:14 PM

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:16 PM

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:17 PM

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

chart.js:パイ、ドーナツ、バブルチャートを始めます chart.js:パイ、ドーナツ、バブルチャートを始めます Mar 15, 2025 am 09:19 AM

このチュートリアルでは、chart.jsを使用してパイ、リング、およびバブルチャートを作成する方法について説明します。以前は、4つのチャートタイプのchart.js:ラインチャートとバーチャート(チュートリアル2)、およびレーダーチャートと極地域チャート(チュートリアル3)を学びました。 パイとリングチャートを作成します パイチャートとリングチャートは、さまざまな部分に分かれている全体の割合を示すのに理想的です。たとえば、パイチャートを使用して、サファリの男性ライオン、女性ライオン、若いライオンの割合、または異なる候補者が選挙で受け取る票の割合を示すことができます。 パイチャートは、単一のパラメーターまたはデータセットの比較にのみ適しています。パイチャートのファンの角度はデータポイントの数値サイズに依存するため、パイチャートは値のあるエンティティをゼロ値で描画できないことに注意してください。これは、割合がゼロのエンティティを意味します

初心者向けのタイプスクリプト、パート2:基本データ型 初心者向けのタイプスクリプト、パート2:基本データ型 Mar 19, 2025 am 09:10 AM

エントリーレベルのタイプスクリプトチュートリアルをマスターしたら、TypeScriptをサポートするIDEで独自のコードを作成し、JavaScriptにコンパイルできるはずです。このチュートリアルは、TypeScriptのさまざまなデータ型に飛び込みます。 JavaScriptには、NULL、未定義、ブール値、数字、文字列、シンボル(ES6によって導入)とオブジェクトの7つのデータ型があります。 TypeScriptはこれに基づいてより多くのタイプを定義し、このチュートリアルではすべてを詳細に説明します。 ヌルデータ型 JavaScriptのように、Typescriptのnull

See all articles