乙個小問題 js 連等問題

2021-08-29 18:07:55 字數 1349 閱讀 3892

let a = ;

let b = a;

a.x = a = ;

console.log(a.x);// undefined

很多人沒仔細考慮的話,會認為 a.x 應該是 ,因為我們都知道,"="  賦值運算子是自右向左的:

a.x = a = ;
這句話就可以理解為 : 將  a = (後面稱為物件b)的返回值賦值給 a.x。這麼想的話,就忽略了這個表示式裡包含的另乙個運算子 「.」,即欄位訪問運算子(或者叫成員運算子?),明顯字段訪問運算子優先順序是要比賦值運算子要高的,因此,這段**在進行賦值運算前,會先解析 a.x,此時 a 還指向 (後面稱為物件a),物件a中找不到x屬性,則給a增加x 屬性,值為 undefined,a變成 。然後進行賦值運算將 a和物件a的x屬性指向物件b,此時 b = a  = }, a = b = ; 很明顯 物件b是沒有x屬性的,a.x自然列印 undefined。下面的圖更形象一些:

第一行: let a = ,在堆記憶體中建立物件a,棧中建立變數 a 指向物件a

第二行:let b = a,棧中建立變數 b 指向 a指向的堆中的物件a

第三行:a.x = a = ,這裡可以分成兩步:

第一步:「計算」a.x,給堆中物件a增加x屬性,不賦值即為 undefined。

第二步計算 a.x = a = :

首先在堆中建立物件b,將a指向物件b。因為a.x的計算是在此賦值之前,所以此時a.x指向的是物件ax屬性

然後將物件ax屬性指向物件b

乙個小問題

error c2679 binary no operator defined which takes a right hand operand of type class smanip int or there is no acceptable conversion 除錯了好久,就是找不出問題在哪。...

乙個小問題。

drop table student create table student sno number 10 sname varchar2 10 sage int insert into student values 1,aa 21 insert into student values 1,aa 21...

乙個小問題

設機器字長w ww位元,u w w u cu w,w uc u w,w uc。將w ww分為c cc個連續長度為u uu位元的區間,稱為u uu區間。實現操作 對於乙個機器字x xx,如果乙個u uu區間非0,則將區間最右bit置1,其餘為0。要求演算法時間為o 1 o 1 o 1 考慮異或操作。對...