js小結(jié)

原生函數(shù)
  常用的原生函數(shù)
    String()
    Number()
    Boolean()
    Array()
    Object()
    Function()
    RegExp()
    Date()
    Error()
    Symbol()
  內(nèi)部屬性 [Class]
    所有typeof 返回值為object 的對象都包含一個(gè)內(nèi)部屬性[Class],這個(gè)屬性無法直接訪問击敌,一般通過Object.prototype.toString(..) 來看擎勘。
      例如:
        Object.prototype.toString.call([1,2,3]);
          // "[object Array]"
    基本類型值
        Object.prototype.toString.call(null);
          // "[object Null]"
    封裝對象包裝
        由于基本類型值沒有.length 和 .toString() 這樣的屬性和方法。
    封裝對象釋疑
      想要自行封裝基本類型值拒担,可以使用Object(..)(不帶new 關(guān)鍵字)
        var a = "abc";
        var b = new String(a);
        var c = Object(a);
          一般不推薦直接使用封裝函數(shù)
    拆封
      封裝對象中的基本類型值鲤孵,可以使用valueOf() 函數(shù)兆旬。
        var a = new String("abc");
        var b = new Number(42);
        var c = new Boolean(true);

a.valueOf(); // "abc"
        b.valueOf(); // 42
        c.valueOf(); // true
    原生函數(shù)作為構(gòu)造函數(shù)
        Array(..)
        var a = new Array(1,2,3);
          a; // [1,2,3]
        var b = [1,2,3]
          b; // [1,2,3]
      構(gòu)造函數(shù)Array(..),不要求必須帶關(guān)鍵字new,不帶時(shí)他會自動(dòng)補(bǔ)上Array構(gòu)造函數(shù)只帶一個(gè)參數(shù)時(shí)候脖岛,該參數(shù)會被數(shù)組的預(yù)設(shè)長度而不是當(dāng)數(shù)組中的一個(gè)元素舍沙。
        var a = new Array(3);
          a.length; // 3
          a;
        總之永遠(yuǎn)不要?jiǎng)?chuàng)建和使用空單元數(shù)組
    Object(..) , Function(..) , 和RegExp(..)
        除非萬不得已近上,否則不要使用Object(..) / Function(..)/ RegExp(..)

Date(..) 和Error(..)
      創(chuàng)建時(shí)間必須使用 new Date(),主要是用來獲取當(dāng)前的Unix 時(shí)間戳Date.new()然后通過日期對象中的getTime() 來獲得。

創(chuàng)建錯(cuò)誤對象(error objec) 主要是為了獲得當(dāng)前運(yùn)行的上下文拂铡。
    Symbol(..)
      基本數(shù)據(jù)類型——符號壹无。符號具有唯一性的特殊值,用它來命名屬性不容易導(dǎo)致重名感帅。
      Symbol 的靜態(tài)屬性形式斗锭,Symbol.create, Symbol.iterator
         obj[Sybol.iterator] = function() {/../}
        使用 Symbol(..) 原生構(gòu)造函數(shù)來自定義符號,不能帶new 關(guān)鍵字失球,否則報(bào)錯(cuò)岖是。
          var mysym = Symbol("my own symbol");
            mysym; // Symbol(my own symbol)
            mysym.toString(); // "Symbol(my own symbol)"
            typeof mysym; // "symbol"

var a = { };
            a[mysym] = "foobar";
            Object.getOwnPropertySymbols(a);
             // [Symbol(my own symbol)]
  原型類型
      原生構(gòu)造函數(shù)有自己的 .prototype對象 如: Array.prototype,
        String.prototype.
        String#indexOf(..)
       在字符串中查找指定字符串的位置。
        String#charAt(..)
       獲得字符串指定位置上字符
        String#substr(..),String#substring(..) 和String# slice(..)
      獲取字符串的指定部分
        String#toUpperCase() 和 String#toLowerCase()
      將字符串轉(zhuǎn)換為大寫和小寫
        String#trim()
      去掉字符串前后的空格,返回新的字符串

強(qiáng)制類型轉(zhuǎn)換
      值的類型轉(zhuǎn)換
          將值從一種類型轉(zhuǎn)換為另一種類型轉(zhuǎn)換豺撑,這是顯示的情況烈疚,隱式的情況通常為強(qiáng)制類型轉(zhuǎn)換。
          JavaScript 中的類型轉(zhuǎn)換總是是返回標(biāo)量基本類型前硫。
      抽象值操作
        ToString
          抽象操作ToString 胞得,它負(fù)責(zé)處理非字符串到字符串的強(qiáng)制類型轉(zhuǎn)換數(shù)組的默認(rèn)toString() 方法經(jīng)過重新定義,將所有的單元字符串化以后在連接在一起屹电。
            var a = [1,2,3];
            a.toString(); // "1,2,3"
        JSON字符串換阶剑,
          JSON.stringify(..) 在對象中遇到undefined,function 和 symbol 時(shí)會自動(dòng)將其忽略,在數(shù)組中則會返回null危号。
            例如:
              JSON.stringify(undefined); // undefined
              JSON.stringify(function(){}); // undefined
              JSON.stringify(
                  [1,undefined,function(){},4]
                ); // "[1,null,null,4]"
              JSON.stringify(
                {a:2,b:function(){}}
              ); // "{"a":2}"

toJSON() 返回的應(yīng)該是一個(gè)適當(dāng)?shù)闹的脸睿梢允侨魏晤愋停缓笤儆蒍SON.stringify(..) 對齊進(jìn)行字符串化外莲。
      ToNumber
        有時(shí)候需要將非數(shù)字值當(dāng)做數(shù)字來使用猪半,比如數(shù)學(xué)運(yùn)算。
          true 轉(zhuǎn)為 1偷线, false 轉(zhuǎn)換為 0 ,undefined 轉(zhuǎn)換為NaN
          null 轉(zhuǎn)換為0
        為了將值轉(zhuǎn)換為相應(yīng)的基本類型磨确,抽象操作ToPrimitive ,首先檢查該值是否有valueOf() 方法,如果有就用該值進(jìn)行強(qiáng)制類型轉(zhuǎn)換声邦。沒有就用toString()
        的返回值來進(jìn)行強(qiáng)制類型轉(zhuǎn)換乏奥。如果valueOf() 和toString() 均不會返回值就會產(chǎn)生TypeError 錯(cuò)誤。
    ToBoolean
       假值:
        值可以被分為以下兩類亥曹。
          1.可以被強(qiáng)制類型轉(zhuǎn)換為false的值
          2.其他(被輕質(zhì)類型轉(zhuǎn)換為true的值)
        以下這些是假值
undefined
null
false
+0,-0和NaN
""
        假值對象:瀏覽器在某些特定情況下邓了,在常規(guī)JavaScript語法基礎(chǔ)上創(chuàng)建了一些外來值,這些就是 “假值對象”
      真值
        真值就是假值列表以外的值

顯式強(qiáng)制類型轉(zhuǎn)換
        字符串和數(shù)字之間的顯示轉(zhuǎn)換
        字符串和數(shù)字之間顯示強(qiáng)制類型轉(zhuǎn)換是通過String(..) 和Number(..).
        兩者之間的顯式強(qiáng)制類型轉(zhuǎn)換
var a = 42;
var b = String(a);
var c = "3.14";
var d = Number(c);
b; // "42"
d: // 3.14
       還有其它方式實(shí)現(xiàn)字符串和數(shù)字之間的顯示轉(zhuǎn)換
var a = 42;
var b = a.toString();
var c = "3.14";
var d = +c;
b; // "42"
d: // 3.14
    日期顯示轉(zhuǎn)換為數(shù)字
一元運(yùn)算符+ 的另一個(gè)常見的用途是將日期對象(Date)對象強(qiáng)制轉(zhuǎn)換為數(shù)字媳瞪。
        var timestamp = +new Date();
    顯式解析數(shù)字字符串
      解析字符串中的數(shù)字和將字符串強(qiáng)制類型轉(zhuǎn)換為數(shù)字的返回結(jié)果都是數(shù)字骗炉。
        例如:
var a = "42";
var b = "42px";
Number(a); // 42
parseInt(a); // 42
Number(b); // NaN
parseInt(b); // 42
        解析允許字符串中含有非數(shù)字字符,解析按從左到右的順序蛇受,如果遇到非數(shù)字字符就停止句葵。
        parseInt(..) 針對的是字符串,像parseInt(..) 傳遞數(shù)字和其他類型的參數(shù)是沒用的
    顯示轉(zhuǎn)換為布爾值
      ToBoolean 是顯式的ToBoolean 強(qiáng)制類型轉(zhuǎn)換:
var a = "0";
var b = [];
var c = {};

var d = "";
var e = 0;
var f = null;
var g;

Boolean(a); // true
Boolean(b); // true
Boolean(c); // true

Boolea(d); // false
Boolea(e); // false
Boolea(f); // false
Boolea(g); // false
      一元運(yùn)算符龙巨!顯示地將值強(qiáng)制類型轉(zhuǎn)換為布爾值笼呆。
var a = "0";
var b = [];
var c = {};

var d = "";
var e = 0;
var f = null;
var g;

!!a; // true
!!b; // true
!!c; // true

!!d; // false
!!e; // false
!!f; // false
!!g; // false

隱式強(qiáng)制類型轉(zhuǎn)換
      隱式地簡化
        字符串和數(shù)字之間的隱式強(qiáng)制類型轉(zhuǎn)換
        +運(yùn)算符既能用于數(shù)字加法,也能用于字符串拼接旨别。
var a = "42";
var b = "0";
var c= 42;
var d = 0;

a + b; // "42"
c + d; // 42
        對象的 - 操作與 + 類似诗赌;
var a = [3];
var b = [1];
a - b ; // 2
      布爾值到數(shù)字的隱式強(qiáng)制類型轉(zhuǎn)換
      隱式強(qiáng)制類型轉(zhuǎn)換為布爾值
      下面的情況會發(fā)生隱式強(qiáng)制類型轉(zhuǎn)換
1.if(..) 語句中的條件判斷表達(dá)式。
2.for(..;...;..)語句中的條件判斷表達(dá)式(第二個(gè))
3.while(..) 和do..while(..) 循環(huán)中的條件判斷表達(dá)式秸弛。
4.铭若? : 中的條件表達(dá)式
5.邏輯運(yùn)算符 || (邏輯或) 和 (邏輯與) 左邊的操作數(shù)(作為條件判斷表達(dá)式)
      || 和 &&
|| 和 && 運(yùn)算符 的返回值并不一定是布爾類型洪碳,而是兩個(gè)操作數(shù)其中的一個(gè)的值
var a = 42;
var b = "abc";
var c = null;

a || b; // 42
a && b; // "abc"
c || b; // "abc"
c&& b; // null

對于 || 來說 如果條件判斷結(jié)果為true 就返回第一個(gè)數(shù)的值,如果為false 就返回第二個(gè)操作數(shù)叼屠。
&& 則相反瞳腌。
下面是一個(gè)|| 十分常見的 || 用法。
function foo(a,b){
a = a || "hello";
b = b || "world";
console.log(a + " " + b );
}

foo(); // "hello world"
foo("yeah","yeah"); // "yeah yeah"
符號的強(qiáng)制類型轉(zhuǎn)換
        寬松相等和嚴(yán)格相等
          “== 允許在相等比較中進(jìn)行強(qiáng)制類型轉(zhuǎn)換镜雨, 而=== 不允許”
        抽象相等
          有幾個(gè)非常規(guī)的需要注意
NaN 不等于NaN
+0 等于-0
寬松不相等 != 就是==的相反嫂侍, !== 同理

字符串和數(shù)字之間的相等比較
1.如果Type(x) 是數(shù)字,Type(y)是字符串荚坞,則返回 x== ToNumber(y)
的結(jié)果挑宠。
2.如果Type(x) 是字符串,Type(y) 是數(shù)字颓影,則返回 ToNumber(x)== y 的結(jié)果各淀。
      其他類型和布爾類型之間的相等比較
       == 最容易出錯(cuò)的地方就是true 和 false 與其他類型之間的相等比較
var a = "42";
var b = true;
a == b; // false
1.如果Type(x) 是布爾類型,則返回ToNumber(x) == y 的結(jié)果
2.如果Type(y) 是布爾類型诡挂,則返回 x == ToNumber(y) 的結(jié)果
          首先:
var x = true;
var y = "42";
x == y; // false
反過來
var x = "42";
var y = false;
x == y; // false
          null 和undefined 之間的相等比較
          null 和undefinded 之間的 == 也涉及隱士強(qiáng)制類型轉(zhuǎn)換碎浇。
1.如果 x 為 null ,y 為 undefined ,則結(jié)果為 true
2.如果x 為undefined, y 為 null, 則結(jié)果為 true
var a == null;
var b;
a == b; // true
a == null; // true
b == null; // true
a == false; // false
b == false; // false
a == "" ; // false
b == ""; // false
a == 0; // false
b == 0; // false

對象和非對象之間的相等比較
        關(guān)于對象和(對象/函數(shù)/ 數(shù)組) 和標(biāo)量基本類型(字符串/數(shù)字/布爾值)之間的比較。
1.如果Type(x) 是字符串或數(shù)字璃俗,type(y)是對象奴璃,則返回 x == ToPrimitive(y) 的結(jié)果
2.如果Type(x) 是對象, Type(y)是字符串或數(shù)字城豁,則返回
      ToPromitive(x) == y 的結(jié)果溺健。
var a = 42;
var b = [42];
a == b; // true

var a = "abc";
var b = Object(a); // new String(a) 一樣
a === b; // false
a == b; // true
            a == b 結(jié)果為true,應(yīng)為b 通過ToPromitive 進(jìn)行強(qiáng)制類型轉(zhuǎn)換,并返回基本類型值 “abc”钮蛛,與 a 相等。
      假值相等的比較
        一下是常規(guī)和非常規(guī)的比較
"0" == null; // false
"0" == undefined; // false
"0" == false; // true -- 暈剖膳!
“0” == NaN; // false
"0" == 0; // true
"0" == ""; // false

false == null; // false
false == undefined; // false
false == NaN; // false
false == 0; // true -- 暈魏颓!
false == "" // true -- 暈!
false == [] // true -- 暈吱晒!
false == {} // false

"" == null; // false
"" == undefined; // false
"" == NaN; // false
"" == 0; // true -- 暈甸饱!
"" == []; // true -- 暈!
"" == {}; // false

0 == null; // false
0 == undefined; // false
0 == NaN; // false
0 == []; true -- 暈仑濒!
0 == {}; false
          因?yàn)樗麄儗儆诩訇枴?br>       極端情況
          [] == ![] // true
      對布爾值進(jìn)行強(qiáng)制類型轉(zhuǎn)換 [] == ![] 變成 [] == false,
           2 == [2]
          "" == [null]; //true

42 == "43" // false
"foo" == 42; // false
"true" = '"" // false

42 == "42" // true
"foo" == ["foo"] // true
      安全運(yùn)用隱式強(qiáng)制類型轉(zhuǎn)換
1.如果兩邊的值中有true 或者 false, 千萬不要使用 ==.
2.如果兩邊的之中有[],"" 或者 0 叹话,盡量千萬不要使用==.這時(shí)候最好使用 === 來避免強(qiáng)制類型的轉(zhuǎn)換。

抽象關(guān)系比較
        雙方都是字符串比較
var a = ["42"];
var b = ["043"];

a < b; // false
a 和b 并沒有被準(zhǔn)換為數(shù)字墩瞳,因?yàn)門oPrimitive 返回的是字符串驼壶,
比較的是 "42 " 和 "043" 兩個(gè)字符串, 因?yàn)?0"在字母順序上小于
“4”喉酌,所以最后結(jié)果為 false.
      同理
var a = [4,2];
var b = [0,4,3];
a < b; // false
a 被轉(zhuǎn)為 “4,2”热凹,b 轉(zhuǎn)為 “0,4,3” 同樣式按字母順序進(jìn)行比較的泵喘。
var a = {b: 42};
var b = {b:43};
a < b ; // false
a 是 [object Object], b也是 [object Object] 所以按著字母順序
a < b 不成立。
    下面的例子
var a = {b: 42};
var b = {b:43};
a < b; // false
a == b; // false
a > b; // false
a <= b; // true
a >= b; // true

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末般妙,一起剝皮案震驚了整個(gè)濱河市纪铺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碟渺,老刑警劉巖鲜锚,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苫拍,居然都是意外死亡芜繁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門怯疤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浆洗,“玉大人,你說我怎么就攤上這事集峦》纾” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵塔淤,是天一觀的道長摘昌。 經(jīng)常有香客問我,道長高蜂,這世上最難降的妖魔是什么聪黎? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮备恤,結(jié)果婚禮上稿饰,老公的妹妹穿的比我還像新娘。我一直安慰自己露泊,他們只是感情好喉镰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惭笑,像睡著了一般侣姆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沉噩,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天捺宗,我揣著相機(jī)與錄音,去河邊找鬼川蒙。 笑死蚜厉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的畜眨。 我是一名探鬼主播弯囊,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼痰哨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匾嘱?” 一聲冷哼從身側(cè)響起斤斧,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霎烙,沒想到半個(gè)月后撬讽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悬垃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年游昼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尝蠕。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烘豌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出看彼,到底是詐尸還是另有隱情廊佩,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布靖榕,位于F島的核電站标锄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茁计。R本人自食惡果不足惜料皇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望星压。 院中可真熱鬧践剂,春花似錦、人聲如沸娜膘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劲绪。三九已至,卻和暖如春盆赤,著一層夾襖步出監(jiān)牢的瞬間贾富,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工牺六, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颤枪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓淑际,卻偏偏與公主長得像畏纲,于是被迫代替她去往敵國和親扇住。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 《ijs》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,089評論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理盗胀,服務(wù)發(fā)現(xiàn)艘蹋,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持票灰,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券女阀,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 2,504評論 1 17
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持屑迂,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券浸策,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 785評論 0 1
  • 舞在飄蕩惹盼、旋轉(zhuǎn) 轉(zhuǎn)幾次庸汗,幾次哀 眉頭輕掩 誰曾,離留 樂在續(xù)演手报、記憶 憶一回蚯舱,一回凄 紅唇半合 誰了,憂喜 番外:...
    李譯閱讀 146評論 0 4