JavaScript の使用に関する誤解
この章では、JavaScript の使用における誤解について説明します。
String replace
文字列內(nèi)の特定の文字を置き換えるには、string の replace メソッドをよく使います
string.replace(subStr/reg,replaceStr/function)
1 つ。パラメータは検索する文字列または正規(guī)表現(xiàn)で、2 番目のパラメータは置換する文字列またはメソッドです
"I'm Byron".replace("B", "b") / を使用できます。 / 私はバイロンです
は私たちが考えていたものと同じですが、
「私は學生ですが、あなたは?」.replace("n","N") // 私は學生です、あなたは?
予想とは異なり、2 番目の「n」は置換されませんでした。文字列が文字列の replace メソッドの最初の引數(shù)として渡された場合、最初に一致した項目のみが置換されます。すべての一致を置き換える場合は、RegExp オブジェクトを渡し、そのグローバル プロパティを指定する必要があります。
「私は學生です、そしてあなたは?」.replace(/n/g,"N") // 私は學生です、そしてあなたは?
typeof
typeof について最もよくある誤解は、typeof は関數(shù)ではなく演算子であるということです。つまり、変數(shù)の型を判斷するときに括弧を追加する必要はなく、直接使用することができます
typeof 1; //numbertypeof( 1); //number、このように記述する必要はありませんが、これは変數(shù)または定數(shù)をラップするのと同じです。ほとんどの場合、typeof の戻り値は文字列です。返される結(jié)果は予期した結(jié)果と同じです。ただし、JavaScript には數(shù)値、文字列、null、未定義な??どのいくつかの基本的な型があることがわかっています。次に、いくつかの例を見てみましょう。
typeof 123; //number
typeof "123" //string
typeof false;定義済み
typeof null //object
typeof new Array(); //object
typeof (new Array()); //十分に明確でない場合は、次のように使用できます。 、結(jié)果は同じです
typeof (function(){}); //function
typeof a; //unknown
1を返します。 2. NaN は數(shù)値ではないことを意味しますが、typeof は數(shù)値を返します 3. "123" は文字列になるので、文字列が返されます 4. false の型は boolean です 5。未定義の場合、この Type 変數(shù)はリテラル値「unknown」を 1 つだけ持つことができます 6。null の型は null ではなく、オブジェクトであるため、typeof が null のみを返すことを期待できません 7。オブジェクトであると判斷された場合は、特定の型の Array や Date を返しません 9。 Function もオブジェクトの型であり、直接 object を返す必要があります。しかし、typeof はそれを別の方法で扱い、関數(shù)を返すことができます 10。未定義の変數(shù)も JavaScript の If IF では unknown を返します。ブール値だけで true か false を判斷するのではなく、0、nan、""、""、unknown、null、false は false とみなされます If (! False) { console.log (1); if (!"") { console.log(3 }; しかし、これはこれらの値が true であることを意味するわけではありません 0==false; //true "0"==false; //これも true です 未定義== false //false null==false //false null==null //true NaN==NaN //false null==未定義 //true 代入演算子の適用エラー JavaScript プログラムでは、if 條件文で代入演算子の等號 (=) を使用すると、間違った結(jié)果が生成されます。比較演算子の 2 つの等號を使用するのが正しい方法です。 ( ==)。 x が 10 に等しくないため、if 條件ステートメントが false (これは予想どおりです) を返します: 比較演算子の一般的なエラー 厳密な比較演算では、 === が恒等演算子であり、チェックされます式の値と型、次の if 條件文は false を返します: この種のエラーは、比較に恒等演算子 (===) を使用する switch 文でよく発生します 次の例型の不一致が原因です。 アラート ポップアップ ウィンドウは実行されません: 加算と接続に関する注意事項 加算とは 2 つの數(shù)値を加算することです。 連結(jié)とは、2 つの文字列を連結(jié)することです。 JavaScript では、加算と連結(jié)の両方に + 演算子を使用します。 次に、例を通して 2 つの數(shù)値の加算と數(shù)値と文字列の連結(jié)の違いを確認します。 var x = 10 + 5; // x の結(jié)果は 15 浮動小數(shù)點データ使用上の注意 JavaScriptのすべてのデータは64ビット浮動小數(shù)點データ(float)として保存されます。 JavaScript を含むすべてのプログラミング言語は、浮動小數(shù)點データの精度を判斷することが困難です: var x = 0.1; Returnステートメントの使用上の注意 JavaScriptは、デフォルトではコードの最終行で自動的に終了します。 次の結(jié)果の例では、未定義が返されます: なぜそのような結(jié)果があるのですか? JavaScript では、例 4 のコードは次のコードと一致しているためです。 function myFunction(a) { 次のような不完全なステートメントの場合は を解析します: var JavaScript はステートメントの 2 行目を読み取ろうとします: power = 10; But because A次のようなステートメントが完了します: return JavaScript はステートメントを自動的に閉じます: return; JavaScript では、セミコロンはオプションです。 return は完全なステートメントであるため、JavaScript は return ステートメントを閉じます。 配列のインデックスに名前を使用する 多くのプログラミング言語では、配列のインデックスとして名前を使用できます。 名前をインデックスとして使用する配列は、連想配列 (またはハッシュ) と呼ばれます。 JavaScript は配列のインデックスに名前を使用することをサポートしていません。數(shù)値インデックスのみが許可されます。 var person = []; JavaScript では、オブジェクトは名前をインデックスとして使用します。 名前をインデックスとして使用すると、JavaScript は配列にアクセスするときに配列を標準オブジェクトとして再定義します。 この操作を?qū)g行すると、配列のメソッドとプロパティは使用されなくなります。使用しないと、エラーが発生します: var person = []; 配列要素を定義します。最後にカンマを追加できません 間違った定義方法: points = [40, 100, 1, 5, 25, 10,]; 正しい定義方法: points = [40, 100, 1, 5, 25, 10]; オブジェクトを定義します。最後にカンマを追加することはできません 間違った定義方法: websites = {site :"php中文網(wǎng)", url:"ipnx.cn", like:460,} 正しい定義: websites = {site: "php中文網(wǎng)"、URL:"ipnx.cn"、いいね:460} 未定義は Null ではありません JavaScript では、null はオブジェクトに使用され、未定義は変數(shù)、プロパティ、メソッドに使用されます。 オブジェクトは、定義されている場合にのみ null にすることができ、それ以外の場合は未定義になります。 オブジェクトが存在するかどうかをテストしたい場合、オブジェクトがまだ定義されていない場合はエラーがスローされます。 間違った使用方法: if (myObj !== null && typeof myObj !== "unknown") 正しい方法は、オブジェクトが定義されているかどうかを検出するために最初に typeof を使用する必要があることです。 : if (myObj のタイプ !== "未定義" && myObj !== null) <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文網(wǎng)(php.cn)</title>
</head>
<body>
<p id="demo"></p>
<script>
var x = 0;
document.getElementById("demo").innerHTML = Boolean(x == 10);
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文網(wǎng)(php.cn)</title>
</head>
<body>
<p id="demo"></p>
<script>
var x = 10;
var y = "10";
document.getElementById("demo").innerHTML = Boolean(x === y);
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文網(wǎng)(php.cn)</title>
</head>
<body>
<p id="demo"></p>
<script>
var x = 10;
switch(x) {
case "10": alert("Hello");
}
</script>
</body>
</html>
var x = 10 + "5"; xの結(jié)果は「105」です
var y = 0.2;
var z = x + y // z の結(jié)果は 0.3 です。
if (z == 0.3) //Return false<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文網(wǎng)(php.cn)</title>
</head>
<body>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = myFunction(55);
function myFunction(a) {
var
power = 10;
return
a * power;
}
</script>
</body>
</html>
var
power = 10;
return; // セミコロンで終了し、未定義を返します
a * power;
}
person[0] = "ジョン";
person[1] = "Doe";
person[2] = 46;
var x = person.length return; 3
var y = person[0]; // person[0] は "John" を返します
person["firstName"] = "John";
person[ "lastName"] = "Doe";
person["age"] = 46;
var x = person.length; // person.length は 0 を返します
var y = person[0] を返します。未定義