我是 JavaScript 開發的初學者,如果有人可以幫助向我解釋這段代碼,我將不勝感激。
m = function () {
let t = e.getCookie("cli-analytics"),
a = e.getCookie("cli-advertisement"),
r = e.getCookie("CLI");
return !(!t && !a) && { analytics: "yes" === t, ads: "yes" === a, visitorHasChosen: !!r };
}
我可以理解對變數 m 的函式分配和 cookie 讀取,但我無法理解回傳的實際作用(回傳一個與復雜邏輯 NOT 進行與運算的物件?在物件內部,一個屬性被分配了一個雙重 NOT?)。順便說一句,這是好的編程實踐/寫作嗎?
謝謝大家
uj5u.com熱心網友回復:
如果滿足這個條件!(!t && !a),回傳{ analytics: "yes" === t, ads: "yes" === a, visitorHasChosen: !!r }
uj5u.com熱心網友回復:
健康)狀況:
如果其中一個t 或 a具有虛假值或兩者都具有虛假值,則回傳object
目的:
鍵的值是布爾型別,因為比較 (===) 或!!
所以它檢查的值是否t等于“是”,然后的值analytics必須是true否則false,它也發生在ads
!!rinvisitorHasChosen等于Boolean(r)
uj5u.com熱心網友回復:
如前所述,代碼首先被縮小,然后再次被美化。
因此,僅從方法的“說話”字串值就可以理解代碼的含義getCookie。從那里開始,從 , 的縮寫變數名開始t,人們可以想出自己有意義的變數名,并將前者替換為后者a。r
然后,正如已經指出的那樣,確實將名稱替換和德摩根定律應用于以下運算式......
!(!t && !a)
!(!analyticsValue && !advertisementValue)- ...否定將一個值轉換為一個真正的布林值,反對該值自己的真/假表示...例如
!0 === true,,!'' === true。!{} === false
- ...否定將一個值轉換為一個真正的布林值,反對該值自己的真/假表示...例如
(!!analyticsValue || !!advertisementValue)- ...雙重否定將一個值轉換為該值自己的真/假表示的真正布林值...例如
!!0 === false,,!!'' === false。!!{} === true
- ...雙重否定將一個值轉換為該值自己的真/假表示的真正布林值...例如
(analyticsValue || advertisementValue)- ...兩個值上的布爾運算子通過兩個值的真/假表示來驗證運算式,但回傳實際值...例如,
(0 || 1) === 1...(2 || '') === 2但是(2 && '') === '',,,(2 && 3) === 3。('' && 3) === ''
- ...兩個值上的布爾運算子通過兩個值的真/假表示來驗證運算式,但回傳實際值...例如,
...其中2)讀取... “如果任何一個值存在(是true)”
... 和3)... "如果其中任何一個值是真實的"。
由于對于以下恢復的示例代碼,仍然不清楚e它來自哪里以及它的含義/代表什么,因此該示例假定一個自定義 cookie storage,它被視為函式的唯一引數......
function getCliCookieValue(storage) {
const analyticsValue = storage.getCookie('cli-analytics');
const advertisementValue = storage.getCookie('cli-advertisement');
// instead of ...
return (!!analyticsValue || !!advertisementValue) && {
analytics: 'yes' === analyticsValue,
ads: 'yes' === advertisementValue,
visitorHasChosen: !!storage.getCookie('CLI'),
};
// // ... one might consider ...
// return (!!analyticsValue || !!advertisementValue) ? {
//
// analytics: 'yes' === analyticsValue,
// ads: 'yes' === advertisementValue,
// visitorHasChosen: !!storage.getCookie('CLI'),
//
// } : null;
}
One could rewrite the above restored function to something more expressive / straightforward but of cause the computation process of the return value does not follow exactly the original one's, thus the return value for falsy intermediate values might differ in comparison with the original implementation.
function getCliCookieValue(storage) {
const isAnalytics = ('yes' === storage.getCookie('cli-analytics'));
const isAdvertisement = ('yes' === storage.getCookie('cli-advertisement'));
// instead of ...
return (isAnalytics || isAdvertisement) && {
analytics: isAnalytics,
ads: isAdvertisement,
visitorHasChosen: !!storage.getCookie('CLI'),
};
// // ... one might consider ...
// return (isAnalytics || isAdvertisement) ? {
//
// analytics: isAnalytics,
// ads: isAdvertisement,
// visitorHasChosen: !!storage.getCookie('CLI'),
//
// } : null;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/437918.html
標籤:javascript
