關於類似 i i

2022-07-13 21:33:26 字數 2349 閱讀 7617

這是乙個「然並卵」的問題,因為沒有人願意在**中給自己找這種麻煩,看到書上講到這個問題忍不住想順勢總結下,就從表示式說起吧。

在js中,同一般的語言一樣,表示式分很多種。

var arr1 = ;                 //

空陣列var arr2 = [1,2,3+5];

var arr3 = [1,,3,,6];

var obj1 = {}; //

空物件var obj2 = ;

逗號之間可以空著不寫,js預設將其定義為undefined,而物件的屬性在有空格時需要加引號以構成字串的屬性名,屬性值可以是任意型別。巢狀定義也可以。通過這個中直接宣告而來的,一般將其稱為原始值或直接量,因為它們與真正通過new關鍵字得到的物件陣列有一點差別。

var vl = function();

vl();

var arr = [1,2,3];

document.write(arr[0]+"

");

var obj = ;

document.write(obj.x+" "+obj["y"]);

function

fun()

fun();

//函式呼叫

function game(name)

}//方法呼叫

類似於對物件屬性的引用,方法呼叫也會先計算點號左邊是否是乙個物件,不是物件的話將會丟擲型別錯誤。

var arr = new array(1,2,3);

var o = new

object;

var date = new date();

還有跟運算子相關的算術表示式、關係表示式、邏輯表示式等、賦值表示式等,值得注意的是js的邏輯表示式並不一定返回布林型別的true和false,如

var ret1 = 5 && [1,2,3];

document.write("ret1: type=>"+typeof(ret1)+" val:"+ret1+"

");

var ret2 = 0 || 5;

document.write("ret2: type=>"+typeof(ret2)+" val:"+ret2+"

");

輸出

但是在其他語言,比如php中,邏輯表示式的最終結果一定是布林型的,這點需要區別。

我們更容易忘記的是最簡單的情形:原始表示式。所謂原始表示式是表示式的最小單位,它不在包含其他表示式,它就是最簡單的常量、變數、原始值或關鍵字,如

//

原始值 15;

"hello";

/[a-z]\d+/;

//關鍵字

null

;

false

;

//變數

index;

sum;

跟運算子扯上關係的,肯定要考慮運算子的優先順序、結合性,優先順序高的先運算,優先順序高的先運算,還要看看是從左到右還是從右到左,比如經常用的連續賦值

var a = b = c = 1;
因為賦值運算子的結合性是從右到左,所以上面又等價於下面這樣的:

var a = (b = (c = 0));
最後一點是運算子的運算順序,通常我們只需要考慮優先順序與結合性就夠了,談到運算順序,它涉及的的是子表示式(父子關係總是相對的),如下面一段計算式

w = x + y * z
子表示式就是w、x、y、z,因為是最簡單的變數,所以它們是原始表示式,js是按照從左到右的順序來計算子表示式的,這裡先依次計算w、x、y、z的子表示式的值,然後根據優先順序和結合性,先計算y+z的值,再與x相加,將結果賦值給表示式w所指代的某個變數。

而我們一般碰到的情況是,計算x子表示式的時候,對y不會產生什麼影響,一旦產生了影響(使用特殊運算子),如改變了y子表示式的值,這稱為運算子的***(side effect)。能改變子表示式的值,肯定要對它賦值,所以一般具有賦值作用的運算子容易產生***,嚴格的說等號具有***,當然一般用等號肯定就是要改變等號左邊表示式的值,談個毛線***。

回到(i++)+(++i),使用具有隱式賦值作用的自增運算子,自減自然也算,就產生***了,前面的先各乙個i子表示式的初始值,假設i初始值為1,然後計算i++時,由於自增原因,自增計算過程中對 i 進行了賦值運算,i++這個整體表示式的值仍為1,再計算++i 時,i 這個子表示式的值已經是2(前面的賦值改變了它的大小),所以後面 i++的值是3,總的結果就是4。其他的,c/c++等的理解方式幾乎相同。

放佛又回到曾今被老師坑慘的c語言考試題=_=

關於i , i 的理解

由於經常有同學在遇到 i i 時犯困難。所以舉例說明一下 int i 20 int sum i 30 這個等式中 i 20 int sum1 i 20 這個等式中 i 21 system.out.println sum system.out.println sum1 這裡輸出的結果是 600 分析 ...

關於C語言中類似 a b c 條件的值

include stdio.h main int a 1,b 2,c 3,t while a 答案是什麼?為什麼?答案不是2 1 2 這是當時我的回答 這個答案應該是121,問題出在while 的迴圈條件,實際上這個迴圈執行了兩次,括號中a b c的實際判斷過程是先判斷a b是否為真,若為真則返回1...

關於iOS 國際化(類似微信切換語言)

第一語言是中文,定義乙個 nsuserdefaults key value 儲存當前語言。implementation nsbundle jjlanguage void setlanguage nsstring language 3 設定翻譯語言包 在專案 project info localiza...