JS-運算元Operands、運算子Operator、優先性Precedence、相依性Associativity

參考資料: MDN Web, 六角學院

運算子優先序(Operator precedence)決定了運算子彼此之間被語法解析的方式,優先序較高的運算子會成為優先序較低運算子的運算元(operands)。

請給予肝肝的工程師一些支持! 'W'

<運算式與運算子/條件運算子>

摘錄:

條件 (三元) 運算子 是 JS唯一用到三個運算元的運算子:在一個條件後面會跟著一個問號 (?),如果條件是 true,在冒號(:)前的表達式會被執行,如果條件是 false,在冒號後面的表達式會被執行,這個運算子常常被用來當作 if 的簡潔寫法.

function getSalary(isMember) {
  return (isMember ? '$3600.0' : '$4000.0');
}

console.log(getSalary(true));
// expected output: "$3600.0"

console.log(getSalary(false));
// expected output: "$4000.0"

console.log(getSalarye(null));
// expected output: "$4000.0"

3600.0 //運算元

4000.0 //運算元

運算子語法結構>>

condition ? exprIfTrue : exprIfFalse

參數

condition
  • 值用來做為條件的表達式
exprIfTrue
  • 如果 condition = true , exprIfTrue 會被執行
exprIfFalse
  • 如果 condition =false , exprIfFalse 也會被執行

<優先性>

先乘除後加減->>

var valueA =3*2 + 4*3
var valueB =4*(3*8)
console.log(valueA,valueB);

// output: 18,96
console.log(3 + 4 * 5); // 3 + 20
// output: 23

console.log(4 * 3 ** 2); // 4 * 9
// output: 36

let a;
let b;

console.log(a = b = 5);
// expected output: 5

相依性-由左邊到右邊判斷>>>

剛剛我們說到了Javascript 遵從先乘除後加減規格, 但我們仍然試圖找尋這些奇怪的地方。這裡很需要各位的拆解能力。
console.log(1>2>3);
console.log(3>2>1);

不要急, 慢慢想!

不要這麼輕易的就看答案!

.

.

.

.

.

.

.

答案揭曉

神奇的事情發生了~

console.log(1>2>3);
console.log(3>2>1);
// true 
   false
3>2  //這裡就會變成true
true > 1 // 按照通識觀念, 這一定會是false。

表達式賦予值>>

Object.defineProperty() 用法參考這!

  • The static method Object.defineProperty() defines a new property directly on an object, or modifies an existing property on an object, and returns the object.
// 物件
var b = {};

//宣告物件.屬性
Object.defineProperty(b,'a',{

value: 2,
writable:false

});

b.a =3; //賦予值 3
console.log(b.a);

var a=3;

a=b.a =1; //奇怪的地方喔! 

console.log(a,b.a);
// Output
   2
   1,2

b.a =3 賦予值, 但是 Object.defineProperty 屬性內是不可更改 = “writable: false”

a=b.a =1; //奇怪的地方喔!

走啊! 回去翻翻 JS表達式的特性 文章, 你將會知道答案。
// 物件
var b = {};

//宣告物件.屬性
Object.defineProperty(b,'a',{

value: 2,
writable:false

});

b.a =3; //賦予值 3
console.log(b.a);

var a=3;

a=b.a =1; //奇怪的地方喔! 

console.log(a,b.a);
// Output
   2
   1,2

我們再建立另外一個物件.屬性

Object.defineProperty() 用法參考這!

var b = {};
Object.defineProperty(b,'a',{
value: 2,
writable:false
});

Object.defineProperty(b,'d',{
    value: 3,
    writable:false
    });

console.log(b);

var a=3;

a=b.d=b.a =1;// 主要是這個地方需要探討

console.log(a);

程式執行的結果如下:

lioajimzen

Share
Published by
lioajimzen

Recent Posts

Vue – 運行ES Module,import與export

import 與 export 在Node.js 有提到其用法: Node.js require、module以及exports 模組設定 - Hugo Habor 每一個Javascript檔案可當作獨立模組系統(ES Module) 1. Module(模組)…

12 months ago

當你的Windows應用程式完全無法執行時,該怎麼辦?

作者今天遇到一個很奇怪的問題 寫程式寫到一半... 點擊應用程式時... 怎麼都跳不出畫面... 後來查詢了一下是Reg註冊可能被微軟更新給搞掉了... 文章資訊來源: 【以解決】各位.exe檔案打不開,不要相信"在 Windows 7 或 Windows Vista 中無法打開 .EXE 檔案"這篇文章…

2 years ago

Python environments in VS Code-建立虛擬環境

Python environments in VS CodePython-建立虛擬環境

2 years ago

Node.js 核心模組-create-server

Node.js可以提供你很多模組,今天來探索如何使用 Node.js 的 http 模組來架設一個簡單的伺服器。 本篇使用模組require 載入你所需要的模組。這次我們使用'http' 模組來創造一個簡單的server。 資料參考 Node.js - createServer 起手式 - iT…

2 years ago

Node.js require、module以及exports 模組設定

針對Node.js來談談 require、module以及exports 模組設定。這些概念允許開發者將大型程序分解成小的、可管理的、可重用的部分,稱為模塊。 下面將逐一介紹這些概念,以及它們如何與 JavaScript 關聯。 An Essential Guide to Node.js Modules (javascripttutorial.net) 1. Module(模組)…

2 years ago

JSON與foreach的逐一條列應用。

像是很多專案必須讀取國家資料中心的metadata,許多檔案格式為CSV、JSON、Html可以利用網頁技術去爬蟲;拿一個範例來嘗試看看就知道這些語法的實際用途。 [主題週]專題報導-開放資料 (Open Data)相關議題與應用 (114230) - Cool3c 在這裡我們使用台北市資料大平台 UBike2.0 作為資料依據! 目的 來抓取空位數量 >15, 抓取空位數量 <15。…

2 years ago