JavaScript編程中,我們經常使用各種運算符來處理數據和控制程序流程。然而,對于函數定義和調用前的 ~(按位取反)和 !(邏輯非)的使用,存在一些常見的誤區。本文將介紹這兩個運算符的正確用法,并澄清一些常見的誤解。
! 是JavaScript中的一元邏輯非運算符,它用來反轉布爾值。如果一個表達式的結果為 true,使用 ! 后將變為 false;反之,如果結果為 false 或任何假值(如 0、""、null、undefined、NaN),! 將使其變為 true。
示例:
let isActive=true;
console.log(!isActive); // 輸出:false
~ 是按位取反運算符,它對數值的每個位執行取反操作,然后加1。在JavaScript中,所有的數字都是以32位浮點數的形式存儲,因此 ~ 運算符會對32位的二進制數進行操作。
示例:
let num=5;
console.log(~num); // 輸出:-6
在函數調用前使用 ~ 和 ! 是不標準的。~ 需要一個數值類型的操作數,而函數調用本身并不返回一個數值,除非函數明確返回了一個數值類型。而 ! 雖然可以用于邏輯反轉,但在函數調用前使用它并沒有實際意義。
誤區示例:
function doSomething() {
return true;
}
console.log(!doSomething()); // 正確用法,輸出:false
console.log(~doSomething()); // 錯誤用法,doSomething() 不返回數值
在某些情況下,使用 ! 前置立即執行函數表達式(IIFE)可以避免函數聲明提升帶來的問題,尤其是在使用ES6模塊或在嚴格模式下。這里有個JS的小技巧,如果上一句句末沒有分號結尾,下一句function前面寫~或者!可以正常執行哦,否則會報錯。
示例:
!function() {
console.log("This will run immediately and won't cause hoisting issues.");
}();
console.log("the end no ;")
!(function(){ // 這種表達式的用法,上一句句末可以不用寫;號
console.log("hello")
})();
了解這些運算符的正確用法可以幫助你編寫更清晰、更有效的JavaScript代碼。記住,代碼的可讀性和一致性對于團隊協作和代碼維護至關重要。
開始學Python的你一定很疑惑,為什么Python里會出現各種各樣的下劃線 “_”,而且位置都不相同,有時候在名稱后面,有時候在前面,有時候還會在數字中間......這些下劃線都分別代表了什么意思?本文就給大家普及普及。
在本文中,我們將介紹 Python 中 _ 字符的不同用法。就像 Python 中的許多其他內容一樣,我們會看到 “_” 的不同用法主要是慣例問題。這里我們將介紹的五種不同情況:
單下劃線通常在3種情況下使用:
1.在解析程序中
_名稱指向交互式解釋器會話中,最后執行的語句結果。這首先是由標準CPython解釋器完成的,其他解析器也緊隨其后。
>>> _
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '_' is not defined
>>> 42
>>> _
42
>>> 'alright!' if _ else ':('
'alright!'
>>> _
'alright!'
2.作為名稱
這與上一點有些關聯,_ 用作一次性的名稱。這為了讓閱讀代碼的人知道,這里分配了某個名稱,但是不打算使用。例如,你可能對循環計數器的實際值不感興趣:
n=42
for _ in range(n):
do_something()
3.i18n
我們可以看到 _ 還可以用作函數。在這種情況下,它通常用于執行國際化和本地化字符串轉換查找的函數的名稱。這似乎源于并遵循 C 語言的相關規則。如在Django文檔中所見:
from django.http import HttpResponse
from django.utils.translation import gettext as _
def my_view(request):
output=_("Welcome to my site.")
return HttpResponse(output)
第二個和第三個用法可能會發生沖突,因此,在任何還將 _ 用作 i18n 查找和翻譯的代碼塊中,都應避免使用 _ 作為一次性使用的名稱。
名稱前的單個下劃線用于指定程序員將名稱視為“私有”。這可以視為一種約定,方便閱讀代碼的人知道以 _ 開頭的名稱供內部使用。 正如Python文檔所述:
帶有下劃線的名稱(例如 _spam)應被視為 API 的非公開部分(無論是函數、方法還是數據成員)。它應被視為實現細節,如有更改,恕不另行通知。
*之所以說是一種約定,是因為它實際上對解析程序而言有著某種意義;如果我們從 <module / package> import *,除非以模塊/軟件包的 __all__ 列表明確包含它們,否則不會導入以 _ 開頭的名稱。
名稱后面的單個下劃線用于避免名稱遮蓋另一個名稱,當然是慣例。例如,如果你想命名某種格式,為了避免掩蓋 Python 的內置格式,你可以將其命名為 format_。
PEP 515 指數建議擴展 Python 的語法,以便下劃線可以用作整體、浮點和復雜數字文本中數字分組的可視分隔符,理由是:
這是其他現代語言的常見特征,可以幫助提高較長的文字或文本的可讀性,其值應清楚地分隔成部分,如字節或十六進制表示法中的單詞。
因此,我們可以執行以下操作::
# 十進制數按千分組
amount=10_000_000.0
# 按字對十六進制地址進行分組
addr=0xCAFE_F00D
# 用二進制文字將位分組為半字節
flags=0b_0011_1111_0100_1110
#相同,用于字符串轉換
flags=int('0b_1111_0000', 2)
在名稱(特別是方法名稱)前使用雙下劃線(__)不是約定,只是對解析程序有特殊的意義。Python 管理這些名稱,它用于避免名稱與子類定義的名稱沖突。正如Python文檔所指出的那樣,任何形式為__spam 的標識符(至少兩個前導下劃線,并且最多一個尾隨下劃線)在文本上均被 _classname__spam替換,其中 classname 是當前類名,其中前導下劃線被去除。
以以下示例為例:
>>> class A(object):
... def _internal_use(self):
... pass
... def __method_name(self):
... pass
...
>>> dir(A())
['_A__method_name', ..., '_internal_use']
如上所示,_internal_use 不變,但是 __method_name 被改成 _ClassName__method_name。 現在,如果你創建 A 的子類,比如說 B(壞、壞名字),那么你將無法輕易覆蓋 A 的__method_name:
>>> class B(A):
... def __method_name(self):
... pass
...
>>> dir(B())
['_A__method_name', '_B__method_name', ..., '_internal_use']
這里的預期行為幾乎等同于Java中的最終方法和C ++中的常規(非虛擬)方法。
這些是 Python 使用的特殊方法名稱。對于我們來說,這只是一個約定,即 Python 系統使用與用戶定義的名稱不沖突的名稱的一種方式。然后,我們通常會覆蓋這些方法并為 Python 調用它們時定義所需的行為。例如,在編寫類時__init__重寫方法。
沒有什么可以阻止我們編寫自己的特殊方法名稱(但是最好別這么做):
>>> class C(object):
... def __mine__(self):
... pass
...
>>> dir(C)
... [..., '__mine__', ...]
盡量不要使用這種命名方式,只需要讓Python定義的特殊名稱遵循該約定即可。
參考鏈接:
Django官方文檔:https://docs.djangoproject.com/en/dev/topics/i18n/translation/
Python官方文檔:https://docs.python.org/3/tutorial/classes.html#private-variables
PEP515:https://www.python.org/dev/peps/pep-0515/
--END--
以上為本文所有內容,希望能幫助各位Python愛好者答疑解惑!
希望本文的同學,記得點贊哈~也可以關注我們!
天繼續為大家分享前端的知識,如果對前端比較感興趣的小伙伴,可以關注我,我會更大家繼續分享更多與前端相關的內容,當然如果內容中又不當的或者文字錯誤的,歡迎大家在評論區留言,我會及時修改糾正。
1.初識HTML
2.HTML骨架結構
HTML基本骨架語法如下所示:
HTML基本骨架結構
HTML骨架標簽說明:
HTML骨架標簽說明
下面通過對HTML骨架的基本認識,你也可以小試牛刀,打開記事本,新建一個帶有HTML骨架標簽的.txt文件。
在.txt中寫入HTML骨架標簽,保存,并將.txt的后綴名修改為.html,右鍵單擊你寫好的文件,然后選擇你要顯示的瀏覽器,本人習慣用谷歌的瀏覽器,這個根據個人的習慣來選擇就好了。
示例代碼如下:
我的第一個HTML頁面
注意:HTML標簽名、標簽的屬性名以及大部分屬性值都統一用小寫,不要問我為什么,這是人家W3C的規范,咱們按規范行事就好啦。
正確示范:
書寫規范
錯誤示范:
錯誤的規范
3.HTML標簽的分類
HTML標簽:在HTML頁面中,帶有“<>”尖括號符號的元素被稱為HTML標簽元素,如上面的<html>、<head>、<body>,它們都是用尖括號包起來,而且這幾個標簽還是HTML的骨架結構標簽,就好比人之所以能站立,就是因為有骨架支撐。
通常我們將其分為常規元素和空元素,以下是對兩種類型的介紹。
常規元素(雙標簽)
語法:<標簽名>內容</標簽名>,如<body>我的網頁內容</body>。
說明:
空元素(單標簽或自封閉標簽)
語法:<標簽名 /> ,比如 <br />
說明:
4.HTML標簽的關系
標簽之間的關系主要是針對雙標簽,雙標簽之間的關系分為如下幾種。
嵌套關系:
嵌套關系
并列關系:
并列關系
提示:在開發的過程中,如果標簽之間是嵌套關系,那么子元素可以通過tab鍵進行縮進,讓其結構和格式更加的清晰。
5.前端開發工具
之前我們是通過記事本來寫html骨架結構,會發現這種情況針對幾行代碼,還是能消化的,但是碰上幾千甚至幾萬以及更多,此時應該怎么辦呢?這個時候就得用到我們的前端開發工具,通過前端開發工具,可以更快更高效的提高我們的開發效率,那我們常見的前端開發工具有如下幾種:
常見的前端開發工具
說明:
提示:Hbuilder和VS Code誰更好?我只能說各有千秋,根據個人的習慣,我個人就比較喜歡Hbuilder,偶爾會用VS Code,如果你習慣用VS Code,繼續用就行了。
以上開發工具的安裝使用,在網絡上都會有很多資料,可以動動小手指就能查到哦。
今天就分享到這兒吧,如果喜歡的記得點關注哦,也歡迎在留言區留言。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。