学習カタログ
1. データ型
データ型
2. オペレーター
インクリメント演算子とデクリメント演算子:
ビット演算子:
ブール演算子:
加法演算子:
等価演算子
3. ステートメント
for-in ステートメント
ラベルステートメント
1. データ型
データ型
基本データ型(5種類)
未定義
ヌル
ブール値
番号
文字列
複合データ型(1種類)
オブジェクト
未定義: 未定義の値が 1 つだけあります (定義されていますが割り当てられていません)。
例:
注: var で宣言されていない場合、直接使用すると例外が報告されます (... が定義されていません)。
提案: 各 var 宣言に初期値を割り当てます。これにより、多くの予期せぬ状況が軽減されます。
例:
ヌル: わずかにあります
ブール値: リテラル値は true と false の 2 つだけです。
Boolean() 関数を使用して、任意のデータ型をブール型に変換できます。
文字列: 空でない文字=>true 空の文字=>false
数値: ゼロ以外の任意 => true 0 および NaN=> false
オブジェクト: 任意のオブジェクト=>true null=>false
未定義 未定義=>false
例:
この場合、if ステートメントを使用するときに、対応するブール変換を自動的に実行します。
if (str) { //str只要是非空字符、任何非零数字、任何非null对象 都是true //str只要是空字符、0、NaN、null、undefined 都是false //这样就省去了 我们一个个的判断了 alert("true"); }
2. 演算子 インクリメント演算子とデクリメント演算子:
【 num, --num, num, num-- 】
var age = 3, age2 = 3;age2;alert(age " " age2);
どちらも 4 ですが、違いは見当たりません。 var age = 3, age2 = 3,num1 ,num2;num1 = age 1;num2 = age2 1;alert(num1 " " num2);
さて、ここが違いです。 1 つは 4 のままですが、もう 1 つは 5 になります。なぜこのようなことが起こっているのでしょうか?優先順位が異なるだけです。Age は最初に演算子を実行し、次に Age はそれ自体に 1 を加算し、次に演算子を介して 1 を加算します。
ビット演算子: [ビットごとの NOT (~)、ビットごとの AND (&)、ビットごとの OR (|)、ビットごとの XOR (^)、左シフト (<<)、符号付き右シフト (>>)、符号なし右シフト(>>>)]
実際、日常生活ではほとんど使うことがないので、ここで少し学んでみましょう。例: ビット単位ではありません
var num1 = 25; // バイナリ 00000000000000000000000000011001 var num2 = ~num1 // バイナリ 111111111111111111111111100110
アラート(num2); // -26
例: ビット単位の AND
例: ビットごとの XOR
var result = 25 & 3; alert(result); //1 //********************* 25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 --------------------------------------------- AND = 0000 0000 0000 0000 0000 0000 0000 0001
例: 左に移動
var result = 25 ^ 3; alert(result); //26 //************* 25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 --------------------------------------------- XOR = 0000 0000 0000 0000 0000 0000 0001 1010 //十进制值 26
var oldValue = 2; // 等于二进制的 10 var newValue = oldValue << 5; // 等于二进制的 1000000,十进制的 64
var oldValue = 64; // 等于二进制的 1000000 var newValue = oldValue >> 5; // 等于二进制的 10 ,即十进制的 2
【論理否定(!)、論理積(&&)、論理和(||)】
var oldValue = -64; // 等于二进制的 11111111111111111111111111000000 var newValue = oldValue >>> 5; // 00000111111111111111111111111110 等于十进制的 134217726
测试:
这里可以告诉大家一个小小的技巧,很多时候我们并不知道某个变量是否有值,但是我们又需要正常使用,那么我们可以给个备胎。
如:浏览器的兼容问题,在旧式浏览器中是用window.event来取事件的相关属性值,新式浏览器中是直接通过形参的形式传过来的。我们就可以。
function myonclick(ev) { var myevent = ev || window.event;//这样就可以保证新旧浏览器的兼容了 }
实验:
加性操作符:
【加法(+)、减法(-)】
这个再熟悉不过了,不过还是有一点需要注意。
var strnum1 = "5"; var num2 = strnum1 + 3; var num3 = strnum1 - 3; alert("num2="+num2+" num3="+num3);//这里会是什么结果呢?
試してみましょう。
なぜこのようなことが起こっているのでしょうか?文字列と数値を追加すると、数値が文字列に変換されます。文字列と数値が減算され、文字列が数値に変換されます。
等価演算子
奇妙なことに、どうして文字列が数値と等しいのでしょうか。はい、ここでは自動変換が使用されています。しかし、そのような結果を見たくない場合はどうすればよいでしょうか?
var num1 = "5";var num2 = 5;var isEqual = num1===num2;alert("num1 は num2 に等しいか:" isEqual);
はい、=== をすべて等しいものとして使用できます。値だけでなく型も比較します。3. ステートメント
for-in ステートメント for ループ ステートメントはよく使用されますが、for-in はあまり使用されないかもしれません。 (for-in ループは、配列以外のオブジェクトを走査するために使用する必要があります。ループに for-in を使用することは、「列挙」とも呼ばれます。) 例:
var obj = {id:2,name:"張三"};var str = "";for(o in obj){ str = "属性: " o " 値: " obj[o] " ";}アラート(str);
ラベルステートメント
複数のネストされたループ内のループの 2 番目のレベルから飛び出たいと思ったことはありますか?一般に、break または continue を使用して最も内側のループから飛び出すか、return を使用して関数全体から飛び出すことしかできません。予想もしなかったのは、ループから抜け出すことができるラベル ステートメントも存在するということです。
例:
var num = 0;outermost:for (var i=0; i <10; i ) { for (var j=0; j <10; j ) { if (i == 5 && j == 5) { 一番外側を破る } }}alert(num); //55
さて、最初の記事はこれでほぼ完成です。最後に、いくつか興味深い質問をさせていただきます。
1. なぜ 1=0.9999999999…… 3. なぜアラート(0123 4)//87
4 つ。
var obj1 = {}; obj1.name2 = "張三";
var str1 = "テスト" str1.name2 = "李思";
alert(obj1.name2 " " str1.name2);
var obj1 = { name2: "111" };
var obj2 = obj1;
obj1.name2 = "222";
obj1 = { name2: "333" };
alert(obj2.name2);//ここに何が表示されますか?
6、
var fun = function (num1) {
If (num1 <= 1) {
1 を返す;
else {
return num1 * fun(num1 - 1);
}
var fun2 = 楽しい;
fun = function () {
1 を返します;
}
alert(fun2(5));//ここで何が表示されますか?
JavaScript の基本的なデータ型を皆さんに紹介する時間はまだあります
JavaScriptの基本データ型には、数値/文字列/ブール値/オブジェクト/関数/未定義の6種類があります。
2.1数値型
数値型は、64 ビット浮動小数点値を格納するために使用されます。しかし、JavaScript は複素数や分数などの非整数も表す必要があるため、0 ~ 2e64 の間のすべての値を表すことはできません。 64 ビットの場合、数値の小数部分を格納するのに 11 ビットが必要で、符号を表すのに 1 ビットが使用されるため、JavaScript は実際に -2e52 から 2e52 までの値を表すことができます。
2.2 文字列型
文字列タイプはテキストを表すために使用されます。引用符内に配置された記号は文字列と見なされますが、特殊な記号はエスケープする必要がある場合があります。
2.3 ブール型
ブール型には、true と false の 2 つの値のみが含まれます。プログラム内でさまざまなブール式を使用して true または false を取得し、さまざまなビジネス ブランチの処理を実装できます。式には複数の条件を含めることができ、計算時の優先順位は次のとおりです。 || が最も低く、次に &&、最後に比較演算子が続きます。他の演算子 (例!)。
和其他许多语言一样,对于&&来说,当前面的条件为false时,后面的条件不再计算,对于||来说,当前面的条件为true时,后面的条件不再计算。
来看下面的例子:
function conditionTest(){ var a = ; var b = ; var c = {"key":"old"}; print(c["key"]); if (a==) print("a = "); if (a== && b==) print("a == && b == "); if (a== || changeValue(c)) print(c["key"]); if (a== && changeValue(c)) print(c["key"]); } function changeValue(obj){ obj["key"] = "changed"; return true; }
它的输出结果如下:
old a = 1 a == 1 && b == 1 old changed
可以看出,在使用||时,没有调用changeValue方法。
2.4 undefined类型
当我们声明了一个变量,但是没有对其赋值时,它就是undefined的,就像下面这样
var b;
print(b);
在Javascript中,还有一个和undefined类似的值:null。undefined表示“变量已声明但是没有复制”,null表示“变量已赋值但为空”,需要注意的是undefined==null的值为true。
2.5 类型转换
我们在上面提到了undefined == null的值是true,但我们使用typeof操作时可以发现,null是object类型,这说明在比较的过程中,发生了类型转换。
类型转换是指将一种类型的值转换成另外一种类型的值。我们使用==进行比较时,会有类型转换,我们可以使用===来禁止类型转换。
来看下面的例子:
function convertTypeTest(){ var a = ; var b = ""; print ("a:" + a); print ("b:" + b); print ("type of a:" + typeof a); print ("type of b:" + typeof b); print ("a==b:" + (a == b)); print ("a===b:" + (a === b)); print ("a===Number(b):" + (a === Number(b))); print ("String(a)===b:" + (String(a) === b)); print ("type of undefined:" + typeof undefined); print ("type of null:" + typeof null); print ("undefined==null:" + (undefined == null)); print ("undefined===null:" + (undefined === null)); }
输出结果如下:
a:1 b:1 type of a:number type of b:string a==b:true a===b:false a===Number(b):true String(a)===b:true type of undefined:undefined type of null:object undefined==null:true undefined===null:false
可以很明显看到==和===的区别。