②語義類標簽與JavaScript數(shù)據(jù)類型

1 語義類標簽(CSS部分)

1.1 定義

?如section誊爹、nav蹬刷、pdiv频丘,span办成,特點是視覺表現(xiàn)上互相都差不多,主要區(qū)別在于表達語義的不同搂漠。

1.2 正確使用語義標簽的好處

?1迂卢、增強了可讀性,HTML最初的設計場景就是“超文本”桐汤;
?2而克、適宜機器閱讀,搜索引擎爬蟲更好地獲取到更多有效信息怔毛;
?3员萍、正確應用語義化結(jié)構(gòu)能讓瀏覽器很好地支持“閱讀視圖功能”,還可以讓搜索引擎的命中率提升拣度,同時碎绎,它也對視障用戶的讀屏軟件更友好。

1.2 語義類標簽的一些使用

?1抗果、hgrouph1-h6的作用筋帖,hgroup是標題組,h1是一級標題冤馏,h2是二級標題日麸;
?2、aside是導航性質(zhì)的內(nèi)容逮光;
?3代箭、article辕录,文章主體部分;
?4梢卸、abbr標簽表示縮寫;
?5副女、hr表示故事走向的轉(zhuǎn)變或者話題的轉(zhuǎn)變蛤高,一般的橫線使用CSS的border來表示;
?6碑幅、strong表示黑體戴陡,em表示重音;
?7沟涨、blockquote表示段落級引述內(nèi)容恤批,q表示行內(nèi)的引述內(nèi)容,cite表示引述的作品名裹赴;

補充

2 JavaScript數(shù)據(jù)類型

2.1 定義

?JavaScript語言中的每個值都屬于一種數(shù)據(jù)類型喜庞,一共有7種數(shù)據(jù)類型,廣泛用于變量棋返、函數(shù)參數(shù)延都、表達式、函數(shù)返回值等場合睛竣;
?數(shù)據(jù)類型可以分為原始類型以及引用類型(也稱對象類型)晰房。

?原始類型與引用類型的差異:

var a = 'hello world';
var b = a;
var a = 'hello javascript';
console.log(a); //hello javascript
console.log(b); //hello world
var obj1 = {
    name: 'jack',
    age: 18
}
var obj2 = obj1;
obj1.name = 'rose';
console.log(obj1.name); //rose
console.log(obj2.name); //rose

原始類型(對象類型):

2.2 Undefined、Null

?Undefined類型表示未定義射沟,值為undefined殊者;任何變量在賦值前都是Undefined類型;又因為JavaScript的代碼undefined是一個變量验夯,為了避免無意中被篡改猖吴,一般我們用void 0void運算符對給定的表達式進行求值,因為是0所以返回undefined)代替undefined簿姨,用void 0代替undefined還可以節(jié)省3個字節(jié)距误。

?Null類型表示“定義了但是為空”,值為null扁位;NullUndefined的區(qū)別:undefined是訪問一個未初始化的變量時返回的值准潭,而null是訪問一個尚未存在的對象時所返回的值,可以把undefined看作是空的變量域仇,而null看作是空的對象刑然。

2.3 Boolean

?Boolean類型有兩個值, truefalse暇务。

2.4 String

?String類型用于表示文本數(shù)據(jù)泼掠,String類型有最大長度是 2^53 - 1怔软,這個最大長度是受字符串的編碼長度影響的,所以String類型的意義并非“字符串”择镇,而是字符串的 UTF16 編碼挡逼,我們字符串的操作charAtcharCodeAt腻豌、length等方法針對的都是 UTF16 編碼家坎。

2.5 Number

?Number類型表示我們通常意義上的“數(shù)字”這個數(shù)字大致對應數(shù)學中的有理數(shù),有一定的精度限制吝梅;Number類型在基本符合 IEEE754-2008 規(guī)定的雙精度浮點數(shù)規(guī)則的情況下虱疏,還引入了Infinity(無窮大)和-Infinity(負無窮大)。

?值得注意的是苏携,JavaScript中有+0-00和負數(shù)進行運算時做瞪,我們就可以得到-0),我們對1分別除以+0-0時會得到Infinity-Infinity,并且它們并不相等右冻,但是在將+0-0做字符串轉(zhuǎn)換時我們會得到一樣的結(jié)果装蓬,===比較的結(jié)果也為true+0-0的使用——我們有時會用符號位存儲一些信息国旷,比較向量或速度的方向信息,如速度-0,負號代表著運動的方向矛物,保留了負號位可以防止這些信息的丟失。

?為什么0.1+0.2不能=0.3跪但?因為這是使用基于IEEE754數(shù)值的浮點計算的通病履羞,不能精確表示0.10.2這樣的浮點數(shù)屡久,使用這種數(shù)值格式的語言計算時使用的是帶有舍入誤差的數(shù)(當代碼被編譯或解釋后忆首,0.1會被四舍五入成一個與之很接近的數(shù)字),但也不是所有的浮點數(shù)都存在舍入誤差被环,比如0.5就沒有舍入誤差糙及;我們盡量不要直接比較兩個浮點的大小,如果真有需要的話筛欢,使用JavaScript提供的最小精度值(檢查等式左右兩邊差的絕對值是否小于最小精度):

console.log( 0.1 + 0.2 == 0.3); // false
console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON); // true

2.6 Symbol

?Symbol是 ES6 中引入的新類型浸锨,表示獨一無二的值,它是一切非字符串的對象key(對應value)的集合版姑,這就是說柱搜,對象的屬性名現(xiàn)在可以有兩種類型,一種是原來就有的字符串剥险,另一種就是新增的Symbol類型聪蘸;還有,每個Symbol實例都是唯一的,所以當你比較兩個Symbol實例的時候健爬,將總會返回false控乾;一些使用場景(簡書一斤代碼先生)。

?注意娜遵,Symbol函數(shù)前不能使用new命令蜕衡,否則會報錯。這是因為生成的Symbol是一個原始類型的值设拟,不是對象衷咽。也就是說,由于Symbol值不是對象蒜绽,所以不能添加屬性⊥跋郑基本上躲雅,它是一種類似于字符串的數(shù)據(jù)類型。

?Symbol的迭代器(Iterator)應用

var o = new Object;
o[Symbol.iterator] = function() {
      var v = 0;
      return {
          next: function() {
          return { value: v++, done: v > 10 }
          }
      }
};
for(var v of o);
console.log(v); // 0 1 2 3 ... 9

?代碼中我們在定義了iterator之后骡和,用for(var v of o)就可以調(diào)用這個函數(shù)相赁,然后我們可以根據(jù)函數(shù)的行為,產(chǎn)生一個forof的行為慰于。

引用類型:

2.7 Object

?在 JavaScript 中钮科,對象類型的定義是“屬性的集合”。對象類型的屬性分為數(shù)據(jù)屬性和訪問器屬性(在第④章詳細解析)兩種婆赠,二者都是key-value(鍵值對形式存儲屬性)結(jié)構(gòu)绵脯,key可以是字符串或者 Symbol類型。

?JavaScript中的幾個原始類型休里,都在對象類型中有一個“親戚”蛆挫。它們是NumberString妙黍、BooleanSymbol悴侵;

?如string類型(var a = 'abc';)和string對象(var a = new String('abc');),3new Number(3) 拭嫁,它們其實是不一樣的東西(===不成立)可免;JavaScript 中的對象比較(===)和 Java 中是一樣的,只有引用地址相同才相等做粤。當比較兩個引用值時浇借,比較的是兩個引用地址,看它們引用的原值是否為同一個副本驮宴,而不是比較它們的原值字節(jié)是否相等逮刨。只有stringnumberboolean這些原始類型才是可以直接對值進行比較修己。

?Number恢总、StringBoolean,三個對象類型(函數(shù)構(gòu)造器)是兩用的睬愤,當跟new搭配時片仿,它們產(chǎn)生對象,當直接調(diào)用時尤辱,它們表示強制類型轉(zhuǎn)換砂豌;Symbol函數(shù)比較特殊,直接用new調(diào)用它會拋出錯誤光督,但它仍然是 Symbol對象的構(gòu)造器阳距。

2.8 類型轉(zhuǎn)換 ★

?大部分運算都會涉及類型轉(zhuǎn)換。其中的 ==運算结借,如果類型不一樣筐摘,總是試圖去做類型轉(zhuǎn)化,里面的規(guī)則非常復雜船老,很容易造成一些代碼中的判斷失誤咖熟,所以不推薦直接使用==運算,推薦進行顯式的類型轉(zhuǎn)換后柳畔,再用===比較馍管;而其它運算,如加減乘除大于小于薪韩,也都會涉及類型轉(zhuǎn)換确沸,所幸的是,實際上大部分類型轉(zhuǎn)換規(guī)則比較簡單俘陷,較為復雜的部分是NumberString之間的轉(zhuǎn)換张惹,以及對象跟原始類型之間的轉(zhuǎn)換,如下表所示:

相互轉(zhuǎn)換

2.8.1 StringToNumber

?字符串到數(shù)字的類型轉(zhuǎn)換岭洲,有三種方法:Number()宛逗、parseInt()parseFloat()盾剩;類型轉(zhuǎn)換支持十進制(30)雷激、二進制(0b111)、八進制(0o13)告私、十六進制(0xFF)屎暇、正負號科學計數(shù)法(1e3或-1e-2),其中Number()可以用于任何數(shù)據(jù)類型轉(zhuǎn)換成數(shù)值驻粟,parseInt()處理整數(shù)時更常用根悼,parseFloat()專門用于把字符串轉(zhuǎn)換成數(shù)值凶异。

?parseInt()在不傳入第二個參數(shù)的情況下,只支持16進制前綴 “0x” 挤巡,而且會忽略非數(shù)字字符剩彬,也不支持科學計數(shù)法,所以建議使用時傳入parseInt()的第二個參數(shù)(如:parseInt("10",16)//按十六進制解析矿卑;parseInt("10",8)//按八進制解析)喉恋;parseFloat()則直接把原字符串作為十進制來解析,它不會引入任何的其他進制母廷,一些例子如下:

var num1 = Number("Hello World"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1

var num1 = parseInt("He was 40"); //NaN
var num2 = parseInt("40 years"); //40
var num3 = parseInt("34 45 66"); //34
var num4 = parseInt("10", 10); //10

var num5 = parseInt("10", 8); //8
var num6 = parseInt("10"); //10
var num7 = parseInt("010"); //10

var num1 = parseFloat("1234blue"); //1234
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("0908.5"); //908.5
var num4 = parseFloat("3.125e7"); //31250000

?總的來講轻黑,Number()parseInt()parseFloat()更常用。

2.8.2 裝箱轉(zhuǎn)換與拆箱轉(zhuǎn)換(對象類型)

2.8.2.1 拆箱轉(zhuǎn)換

?定義:把對象類型轉(zhuǎn)換為原始類型稱為拆箱琴昆。

?方法:toPrimitive(input,preferedType)氓鄙,該方法有兩個參數(shù),input(輸入對象) 和 preferedTypeString或者Number业舍,默認為Number)玖详;在preferedType為默認的情況下,如果 input 輸入的是對象或者String類型勤讽,則會嘗試調(diào)用valueOf,如果是原始值則直接返回拗踢,不是則使用 toString(如果不是原始值脚牍,調(diào)用input.toString()方法,如果是原始值直接返回)來獲得拆箱后的原始類型巢墅。如果valueOftoString都不存在(方法被覆蓋)诸狭,或者沒有返回原始類型,則會產(chǎn)生類型錯誤君纫;如果 preferedType值為String驯遇,而且輸入的是String類型,會優(yōu)先調(diào)用toString蓄髓,再到valueOf叉庐;

?在 ES6 之后,還允許對象通過顯式指定@@toPrimitive Symbol來覆蓋方法原有的行為(valueOftoString)会喝。

o[Symbol.toPrimitive] = () => {console.log("toPrimitive"); return "hello"}

2.8.2.1 裝箱轉(zhuǎn)換

?定義:把原始類型轉(zhuǎn)換為對應的對象類型的操作稱為裝箱陡叠。

?原理:每一種原始類型NumberString肢执、Boolean在對象中都有相應的類枉阵。

?方法:.toString()方法;例如

1 .toString() => '1';

?注意1后面有個空格预茄,無則報錯兴溜;調(diào)用過程把1進行裝箱操作轉(zhuǎn)換成Number()的臨時對象。

2.8.2.3 typeof運算

?typeof方法的運算結(jié)果和運行時(runtime)所表示出的類型:

?總結(jié)如下:

?1、typeof不能區(qū)分對象拙徽、數(shù)組刨沦、正則,對它們操作都返回object斋攀;

?2已卷、String/Number/Boolean/Undefined/Object/function返回的字符串形式分別為:string/number/boolean/undefined/object/function

?3淳蔼、特殊情況:

typeof 1/0; // NaN(這個NaN不是字符串類型侧蘸,是數(shù)值類型)
typeof typeof 1/0; // NaN(這個NaN不是字符串類型,是數(shù)值類型)
typeof (1/0); // " number"
typeof typeof (1/0); // " string"
typeof (typeof1/0); // " number"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹉梨,一起剝皮案震驚了整個濱河市讳癌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌存皂,老刑警劉巖晌坤,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異旦袋,居然都是意外死亡骤菠,警方通過查閱死者的電腦和手機鲁沥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門经窖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尸折,“玉大人蝶押,你說我怎么就攤上這事狭园“” “怎么了挑格?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵师幕,是天一觀的道長专控。 經(jīng)常有香客問我抹凳,道長,這世上最難降的妖魔是什么伦腐? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任赢底,我火速辦了婚禮,結(jié)果婚禮上柏蘑,老公的妹妹穿的比我還像新娘颖系。我一直安慰自己,他們只是感情好辩越,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布嘁扼。 她就那樣靜靜地躺著,像睡著了一般黔攒。 火紅的嫁衣襯著肌膚如雪趁啸。 梳的紋絲不亂的頭發(fā)上强缘,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音不傅,去河邊找鬼旅掂。 笑死,一個胖子當著我的面吹牛访娶,可吹牛的內(nèi)容都是我干的商虐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼崖疤,長吁一口氣:“原來是場噩夢啊……” “哼秘车!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劫哼,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叮趴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后权烧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眯亦,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年般码,在試婚紗的時候發(fā)現(xiàn)自己被綠了妻率。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡板祝,死狀恐怖宫静,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扔字,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布温技,位于F島的核電站革为,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舵鳞。R本人自食惡果不足惜震檩,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜓堕。 院中可真熱鬧抛虏,春花似錦、人聲如沸套才。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽背伴。三九已至沸毁,卻和暖如春峰髓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背息尺。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工携兵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搂誉。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓徐紧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炭懊。 傳聞我的和親對象是個殘疾皇子并级,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355