摘要:只比較值得結(jié)果,,裝換為數(shù)值后就是,但是當他們是數(shù)組中的一項,或字符串時并非是空的。再看一個比較奇怪的例子首先,看右邊,邏輯非對進行布爾轉(zhuǎn)換,依據(jù)上面的裝換表,數(shù)組其實也是對象,裝換為真。
String
字符串中可以包含由反斜杠和字符構(gòu)成的特殊字符,如 換行, 退格,f 換頁, 回車, Tab;
var multiLine = " first second third line " alert(multiLine) // alerts 3 lines
""當做轉(zhuǎn)義符號也可以避免一些問題,如
var str = "I"m the Valrus"
當計算字符串長度時,特殊字符也會參與計算,如:
var str = "My " // 3 .` `也算其中之一 alert(str.length) // 3
javascript中的字符串只能讀取不能改變;
javascript中有兩種查找子字符串的方法,indexOf和lastIndexOf,返回找到的第一個字符的位置,沒找到返回-1;
逐位運算符~not,~n相當于 -(n+1),if ~indexOf相當于if found;
取得子字符串的三種方法substr, substring, slice,可以Google找到它們之間的差異,也可以從后文鏈接中找到;
字符串的筆記
字符串逐位比較,一旦比較出大小就不再往后比較;"Bob" > "Bar" // true, because o > a,alert("2" > "14"); // true
字符裝換為ASCII碼比較
當有數(shù)值參與比較時,會把字符串也轉(zhuǎn)換為數(shù)值,如alert(2 > "14"); // false
Number, MathJavaScript中的數(shù)值采用雙精度(IEEE 754),每個數(shù)占8byte;
JavaScript可以識別十六進制(0xFF),八進制(010)以及科學(xué)計數(shù)方法的數(shù)字(3e5);
Infinity和-Infinity是兩個特殊的值,它們大于或小于任何值,對它們進行運算后依舊會得到Infinity,二者相除會得到NaN,并不會報錯;
當一個數(shù)學(xué)運算符不能被正確執(zhí)行時會得到NaN(0/0),它不等于包括其本身的任何數(shù)值,只可有isNaN函數(shù)檢查;
除了雙向的加號,其它所有的運算符都會把數(shù)值形式的字符串轉(zhuǎn)換為數(shù)值;alert( -"12.34" / "2" ) // -6.17;
不能轉(zhuǎn)換則返回NaN;
一個由空白符組成的字符串會被轉(zhuǎn)化為0;
如果字符串首字母非數(shù)字,parseInt/parseFloat會返回NaN,alert( parseInt("a123") )//NaN;
JavaScript中的數(shù)值計算存在精度問題(alert(0.1 + 0.2 == 0.3)//false)(浮點數(shù)不能被二進制精確的表示),解決方法可以先轉(zhuǎn)化為整數(shù),再除以10alert( (0.1*10 + 0.2*10) / 10 ) // 0.3,也可以使用toFixed;
Arrayshift,pop刪除對應(yīng)項,并返回該項;
unshift,push;
join,split;
如果給數(shù)組的length賦值低于數(shù)組實際的長度,會刪除超過的項;
push,pop直接操作最后一項,其運行速度快,效率高;
shift,unshift操作第一項,需要記住整個數(shù)組,效率低;
數(shù)組中的length方法(屬性) 其實是last index+1,
var fruits = [] // empty array fruits[1] = "Peach" fruits[99] = "Apple" alert(fruits.length) // 100 (but 2 elements)
對數(shù)組也可以使用delete,但是只會刪除該項的值,不會真的刪除該項;
splice在原數(shù)組上更改和slice返回原數(shù)組的一個片段(新數(shù)組);
sort默認把內(nèi)容轉(zhuǎn)化為string,然后根據(jù)ASCII碼比較;
new Array返回的是具有指定長度的值為空的數(shù)組;
Objectsobj.prop和obj[prop]二者都可以訪問對象中的一項,但是值得注意的是obj.prop里prop是該項的名稱,obj[prop]里的prop是該項的值,此時prop是字符串,應(yīng)該加引號;
alert("key" in obj) // true, key exists使用in運算符可以用來確定是否存在某一項;
使用for in時,子項處理順序不確定,不同瀏覽器有所差別;
對象中可以儲存一切類型,包括函數(shù);
可以利用對象實現(xiàn)鏈式調(diào)用,其關(guān)鍵在于每次的返回值為this;
var ladder = { step: 0, up: function() { this.step++ return this }, down: function() { this.step-- return this }, showStep: function() { alert(this.step) return this } } ladder.up().up().down().up().down().showStep() // 1
使用構(gòu)造函數(shù)創(chuàng)建對象時,var animal = new Animal()和var animal = new Animal等同;
使用構(gòu)造函數(shù)創(chuàng)建對象時,其關(guān)鍵在于this,如果構(gòu)造函數(shù)返回了一個對象則會忽略this;
JS中存在Math,Date,RegExp三種內(nèi)置對象,函數(shù)從某種程度上來說也是對象,String,Number,Booleans三者比較特殊,它們各自擁有一些方法;
對象轉(zhuǎn)換為簡單數(shù)據(jù)類型 轉(zhuǎn)化為字符串如果對象中存在toString方法,且返回一個簡單類型數(shù)據(jù),那么就返回這個字符串(所有數(shù)組默認擁有,所以一般執(zhí)行到此完畢);
默認
alert( {key: "value"} ) // toString for Objects outputs: [object Object] alert( [1,2] ) // toString for Arrays lists elements "1,2" alert( new Date ) // toString for Dates outputs the date as a string
可以自己定義一個toString方法
var user = { firstName: "John", toString: function() { return "User " + this.firstName } } alert( user ) // User John
如果存在valueOf方法,且返回一個簡單類型數(shù)據(jù),那么返回這個;
alert()會觸發(fā)裝換為字符串
轉(zhuǎn)換為數(shù)值(兩種情況下發(fā)生,非常常見)對數(shù)值進行計算的方法( Math.sin(obj),isNaN(obj))以及運算符(+,-,*,/等等)
做比較時(注:obj1==obj2,只有二者引用同一對象時才相等);Number(obj)也會轉(zhuǎn)換,
數(shù)值轉(zhuǎn)換規(guī)則如下
如果存在valueOf方法,且返回一個簡單類型數(shù)據(jù),那么返回這個結(jié)果;
如果對象中存在toString方法,且返回一個簡單類型數(shù)據(jù),那么就返回這個字符串;
alert( new Date() ) // The date in human-readable form alert( +new Date() ) // Microseconds till 1 Jan 1970
自己定義一個valueOf方法
var room = { num: 777, valueOf: function() { return this.num } } alert( +room ) // 777
不存在valueOf方法,但是存在toString方法時會調(diào)用此方法
var room = { num: 777, toString: function() { return this.num } } alert( room / 3 ) // 259
注意只需要返回簡單數(shù)值類型即可(Numeric,String,Boolean),不一定非要返回數(shù)值;
裝換為布爾值裝換表
|Value | Converted to…|
true/false | no conversion |
undefined, null | false |
Number | 0, NaN become false, others - true. |
String | "" becomes false, any other - true |
Object | true |
注意,字符"0"為true;
涉及到邏輯運算符會觸發(fā)布爾裝換;
但是也有比較奇怪的地方,看下面兩例
alert( [0] == 0 ) // true alert( " 0 " == 0 ) // true alert( " 0 " == false ) // true //
if ([0]) alert(1) // 1, if treats [0] as true if (" 0 ") alert(2) // 2, if treats " 0 " as true
仔細想想如何轉(zhuǎn)換的,就可以理解了。==只比較值得結(jié)果,[0],“0”裝換為數(shù)值后就是0,但是當他們是數(shù)組中的一項,或字符串時并非是空的。
再看一個比較奇怪的例子
alert( [] == ![] ) // true
首先,看右邊![],邏輯非對[]進行布爾轉(zhuǎn)換,依據(jù)上面的裝換表,數(shù)組其實也是對象,object裝換為真。所以右邊![] = !true = false;
再看左邊,對象與簡單類型比較時,會按數(shù)值方式裝換,沒有valueOf,將使用toString進行裝換(以逗號分隔的字符串)那么就裝換為一個空的字符串""=false;
所以二者相等;
檢測一下你是否真的掌握了數(shù)值裝換,看看下面的題目能不能理解
6 / "3" = 2 "2" * "3" = 6 4 + 5 + "px" = "9px" "$" + 4 + 5 = "$45" "4" - 2 = 2 "4px" - 2 = NaN 7 / 0 = Infinity {}[0] = undefined parseInt("09") = "0" or "9" // octal or decimal, depends on the browser 5 && 2 = 2 2 && 5 = 5 5 || 0 = 5 0 || 5 = 5說明
本文對各類型并未做詳盡的說明,想了解更多資料可以參考以下文章
Mastering data types
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86410.html
摘要:但是在中,的生命還會繼續(xù)。這其中最典型的問題便是批量增加元素。這時,如果構(gòu)造函數(shù)被調(diào)用時沒有參數(shù),則會自動設(shè)置為。因為從系統(tǒng)的角度來說,當你用字符串的時候,它會被傳進構(gòu)造函數(shù),并且重新調(diào)用另一個函數(shù)。 序言 在今天,JavaScript已經(jīng)成為了網(wǎng)頁編輯的核心。尤其是過去的幾年,互聯(lián)網(wǎng)見證了在SPA開發(fā)、圖形處理、交互等方面大量JS庫的出現(xiàn)。 如果初次打交道,很多人會覺得js很簡單...
摘要:概要當中的函數(shù)站在不同的角度有不同的分類和應(yīng)用本文站在高階函數(shù)的角度來討論當中函數(shù)的應(yīng)用場景。解決老版本瀏覽器函數(shù)兼容性問題判斷數(shù)據(jù)類型高階函數(shù)實現(xiàn)也就是面向切面編程在中這個概念基礎(chǔ)且重要。 概要 js當中的函數(shù)站在不同的角度有不同的分類和應(yīng)用,本文站在高階函數(shù)的角度來討論js當中函數(shù)的應(yīng)用場景。 首先明確高階函數(shù)定義: 函數(shù)可以作為參數(shù)被傳遞 函數(shù)可以作為返回值輸出 應(yīng)用場景 函...
摘要:概要當中的函數(shù)站在不同的角度有不同的分類和應(yīng)用本文站在高階函數(shù)的角度來討論當中函數(shù)的應(yīng)用場景。解決老版本瀏覽器函數(shù)兼容性問題判斷數(shù)據(jù)類型高階函數(shù)實現(xiàn)也就是面向切面編程在中這個概念基礎(chǔ)且重要。 概要 js當中的函數(shù)站在不同的角度有不同的分類和應(yīng)用,本文站在高階函數(shù)的角度來討論js當中函數(shù)的應(yīng)用場景。 首先明確高階函數(shù)定義: 函數(shù)可以作為參數(shù)被傳遞 函數(shù)可以作為返回值輸出 應(yīng)用場景 函...
摘要:書體宋體仿宋體黑體等例如自帶的宋體實為中易宋體。傳統(tǒng)上說的等線體以當代視角來看通常是較為幼細的黑體。前面的過程我們稱之為編碼,后面的這個過程我們稱之為解碼。部分瀏覽器比如可以選擇編碼自動檢測功能,使用基于統(tǒng)計的方法判斷未定編碼。 準備工作 字符 - Character 字母、數(shù)字、漢字、符號等,是一種抽象實體。 字形 - Glyph 單個「字符」的具體表達,一個字可有多個不同的字形。 ...
摘要:這被稱為短路求值工作原理與運算符將會返回第一個的值。當所有的操作數(shù)都是時,將返回最后一個表達式的結(jié)果?;蜻\算符將返回第一個的值。 這次我們主要來分享11個在日常教程中不常被提及的JavaScript小技巧,他們往往在我們的日常工作中經(jīng)常出現(xiàn),但是我們又很容易忽略。 1、過濾唯一值 Set類型是在ES6中新增的,它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。結(jié)合擴展運算符(...)...
閱讀 3627·2021-11-24 09:39
閱讀 2567·2021-11-15 11:37
閱讀 2222·2021-11-11 16:55
閱讀 5244·2021-10-14 09:43
閱讀 3716·2021-10-08 10:05
閱讀 3019·2021-09-13 10:26
閱讀 2337·2021-09-08 09:35
閱讀 3548·2019-08-30 15:55