RYF javascript筆記2


3. 標準庫

3.1 Object對象

3.1.1 概述

js提供一個Object對象驹碍,所有其他對象都繼承自它唤冈。
Object本身也是一個構(gòu)造函數(shù)伦糯,可以用來生成新對象够庙。它可以接受一個參數(shù)。如果該參數(shù)是一個對象蓝纲,則直接返回這個對象阴孟;如果是一個原始類型的值,則返回該值對應的包裝對象税迷。

var o = new Object(); //與 var o = {} 等價

var o1 = {a:1};
var o2 = new Object(o1);
o1 === o2 // true

new Object(123) instanceof Number // true

在Object對象上面部署方法:
1永丝、部署在Object對象本身

Object.print = function(o){ console.log(o) };
var o = new Object();
Object.print(o); // Object

2、部署在Object.prototype對象
定義在Object.prototype對象上面的屬性和方法箭养,將被所有實例對象共享慕嚷。

Object.prototype.print = function(){ console.log(this)};
var o = new Object();
o.print(); // Object

3.1.2 Object對象的方法

3.1.2.1 Object()

Object()可以將任意值轉(zhuǎn)為對象。
其中毕泌,原始類型的值轉(zhuǎn)為對應的包裝對象喝检。
對象,則返回原對象懈词。

Object() // 還有Object(undefined)、Object(null) 返回一個空對象

Object(1) // 等同于 new Number(1)
Object('foo') // 等同于 new String('foo')
Object(true) // 等同于 new Boolean(true)

Object([]) // 返回原數(shù)組
Object({}) // 返回原對象
Object(function(){}) // 返回原函數(shù)

3.1.2.2 Object.keys()辩诞,Object.getOwnPropertyNames()

Object.keys方法返回對象可枚舉的屬性名坎弯。
Object.getOwnPropertyNames方法返回對象所有的屬性名。

var a = ["Hello", "World"];
Object.keys(a); // ["0", "1"]
Object.getOwnPropertyNames(a); // ["0", "1", "length"]

可以用Object.keys(o).length得到對象的屬性總數(shù)译暂。

3.1.2.3 Object.observe() //chrome支持

Object.observe方法用于觀察對象屬性的變化抠忘。

var o = {};
Object.observe(o, function(changes) {
  changes.forEach(function(change) {
    console.log(change.type, change.name, change.oldValue); 
  });
});
o.foo = 1; // add, 'foo', undefined
o.foo = 2; // update, 'foo', 1
delete o.foo; // delete, 'foo', 2

3.1.2.4 其他方法

3.1.3 Object實例對象的方法

除了Object對象本身的方法,還有不少方法是部署在Object.prototype對象上的外永,所有Object的實例對象都繼承了這些方法崎脉。

3.1.3.1 Object.prototype.valueOf()

valueOf方法的作用是返回一個對象的值,默認情況下返回對象本身伯顶。
它的主要用途是囚灼,自動類型轉(zhuǎn)換時會默認調(diào)用這個方法。

var o = new Object();
1 + o // "1[object Object]"

可以用自定義方法覆蓋它祭衩。

o.valueOf = function (){return 2;};
1 + o // 3

3.1.3.2 Object.prototype.toString()

toString方法的作用是返回一個對象的字符串形式灶体。
數(shù)組、字符串和函數(shù)都部署了自己的toString方法掐暮。

[1,2,3].toString() // "1,2,3"

3.1.3.3 toString()的應用:判斷數(shù)據(jù)類型

{}.toString() // "[object Object]"

上面代碼返回一個字符串“object Object”蝎抽,其中第2個字符串表示該值的準確類型。

實例對象的toString方法路克,實際上是調(diào)用Object.prototype.toString方法樟结。使用call方法养交,可以在任意值上調(diào)用Object.prototype.toString方法,從而幫助我們判斷這個值的類型瓢宦。

var type = function (o){
    var s = Object.prototype.toString.call(o);//為什么不直接使用o.toString(),因為數(shù)組碎连、字符串和函數(shù)都部署了自己的toString方法。null調(diào)用toString會報錯刁笙。
    return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};

type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"

3.1.4 對象的屬性模型

3.1.4.1 屬性的attributes對象破花,Object.getOwnPropertyDescriptor()

每個屬性都有一個attributes對象,保存該屬性的一些元信息疲吸。

var o = { p: 'a' };

Object.getOwnPropertyDescriptor(o, 'p') 
// Object { value: "a", 
//         writable: true, 
//         enumerable: true, 
//         configurable: true
// }

enumerable: 表示該屬性是否可枚舉座每,默認為true,也就是該屬性會出現(xiàn)在for...in和Object.keys()等操作中摘悴。

configurable:表示“可配置性”峭梳,默認為true。如果設為false蹂喻,表示無法刪除該屬性葱椭,也不得改變attributes對象(value屬性除外)

3.1.4.2 Object.defineProperty(),Object.defineProperties()

可以通過這兩個方法定義或修改一個屬性口四,然后返回修改后的對象孵运。

var o = Object.defineProperties({}, {
        p1: { value: 123, enumerable: true },
        p2: { value: "abc", enumerable: true },
        p3: { get: function() { return this.p1+this.p2 },
              enumerable:true,
              configurable:true
        }
});

3.1.4.3 Object.getOwnPropertyNames()

Object.getOwnPropertyNames方法返回直接定義在某個對象上面的全部屬性的名稱,而不管該屬性是否可枚舉蔓彩。

var o = Object.defineProperties({}, {
        p1: { value: 1, enumerable: true },
        p2: { value: 2, enumerable: false }
});

Object.getOwnPropertyNames(o)
// ["p1", "p2"]

一般來說治笨,系統(tǒng)原生的屬性(即非用戶自定義的屬性)都是不可枚舉的。

// 比如赤嚼,數(shù)組實例自帶length屬性是不可枚舉的
Object.keys([]) // []
Object.getOwnPropertyNames([]) // [ 'length' ]

3.1.4.4 Object.prototype.propertyIsEnumerable()

判斷一個屬性是否可枚舉旷赖。

o.propertyIsEnumerable("toString") // false

3.1.4.5 可寫性(writable)

決定屬性的值是否可變。
如果為false更卒,那么修改屬性值的時候不會有效果(也不報錯)等孵。

var o = Object.defineProperty({}, "a", { value : 37, writable : false });
o.a=88;
console.log(o.a);

3.1.5 控制對象狀態(tài)

3.1.5.1 Object.preventExtensions方法

使一個對象無法再添加新的屬性,但可以delete現(xiàn)有屬性蹂空。俯萌。

var o = {id:1};
Object.preventExtensions(o);
o.name="dgl";
console.log(o.name); // undefined
delete o.id;

3.1.5.2 Object.seal方法

使一個對象既無法添加新屬性,也無法刪除現(xiàn)有屬性上枕。

3.1.5.3 Object.freeze方法

使一個對象無法添加新屬性绳瘟、無法刪除現(xiàn)有屬性、也無法改變屬性的值姿骏,使這個對象實際上變成了常量糖声。

3.1.5.3 局限性

上面這些方法鎖定對象的可寫性,但是依然可以通過改變該對象的原型對象,來為它增加屬性蘸泻。
解決方案是琉苇,把原型也凍結(jié)住。

3.2 Array 對象

3.2.1 概述

Array的構(gòu)造函數(shù)行為很不一致悦施,因此不建議使用Array創(chuàng)建新數(shù)組并扇。

3.2.2 Array對象的靜態(tài)方法

3.2.2.1 isArray方法

Array.isArray方法用來判斷一個值是否為數(shù)組。它可以彌補typeof運算符的不足抡诞。

var a = [1,2,3];
typeof a // "object"
Array.isArray(a) // true

3.2.3 Array對象實例的方法

以下這些Array對象實例的方法穷蛹,都是數(shù)組實例才能使用。如果不想創(chuàng)建實例昼汗,只是想單純調(diào)用這些方法肴熏,可以寫成 [].method.call(調(diào)用對象,參數(shù)) 的形式顷窒,或者 Array.prototype.method.call(調(diào)用對象蛙吏,參數(shù))的形式禀崖。

3.2.3.1 ivalueOf方法捉偏,toString方法

  • valueOf方法返回數(shù)組本身。

  • toString 方法返回數(shù)組的字符串形式贝或。

    var a = [1,2,3];
    a.valueOf()// [1,2,3]
    a.toString()// "1,2,3"

3.2.3.2 push方法谓着,pop方法

  • push方法 在數(shù)組的末端添加一個或多個元素泼诱,并返回添加后的數(shù)組的長度
  • push方法還可以用于向?qū)ο筇砑釉厣廾录尤朐氐逆I對應數(shù)組的索引治筒,并且對象有一個length屬性。
  • pop方法 刪除數(shù)組的最后一個元素改抡,并返回該元素矢炼。
    對空數(shù)組使用pop方法系瓢,不會報錯阿纤,而是返回undefined。
  • 合并兩個數(shù)組 Array.prototype.push.apply

示例:

var a = new Array();
var b = {id:123};

a.push(1) // 1
a.push("a",true) // 3
console.log(a); // [1,"a",true]

[].push.call(b, 'yy');
console.log(b); // {0: "yy", id: 123, length: 1}

a.pop() // true
console.log(a);// [1,"a"]

[].pop() // undefined

Array.prototype.push.apply(a, b);
console.log(a); // [1, "a", "yy"]

3.2.3.3 join方法夷陋,concat方法

  • join方法 將所有數(shù)組成員組成一個字符串返回欠拾。如果不提供參數(shù),默認用逗號分隔骗绕。
  • concat方法 連接多個數(shù)組藐窄。

示例:

var a = [1,2,3,4];
a.join() // "1,2,3,4"
a.join('') // '1234'
Array.prototype.join.call(a, '-') // "1-2-3-4"
a.concat(["world"]) // [1, 2, 3, 4, world]

3.2.3.4 shift方法,unshift方法

shift 刪除數(shù)組的第一個元素酬土,并返回該元素荆忍。
unshift 在數(shù)組的第一個位置添加元素,并返回數(shù)組長度。

var list = ['a','b','c'];
console.log(list.shift()); // a
console.log(list.unshift(0)); // 3
console.log(list); // [0, "b", "c"]

3.2.3.5 reverse方法

反轉(zhuǎn)

var a = ['a', 'b', 'c'];
a.reverse() // ["c", "b", "a"] 

3.2.3.6 slice方法

1刹枉、作用相當于substring叽唱。
第一個參數(shù)為起始位置(從前往后,0開始微宝;從后往前棺亭,-1開始),
第二個參數(shù)為終止位置(但不包括該位置的元素)

參數(shù)是負數(shù)蟋软,表示從后向前排序镶摘;
第一個參數(shù)值大于數(shù)組成員的個數(shù),或者第二個參數(shù)小于第一個參數(shù)岳守,則返回空數(shù)組凄敢。

var a = ["a","b","c"];
a.slice(1,2) // ["b"]
a.slice() // ["a","b","c"]
a.slice(-2) // ["b", "c"]
a.slice(-2,-1) // ["b"]
a.slice(-2,0) // []
a.slice(-2,1) // []
a.slice(-2,2) // ["b"]
a.slice(4) // []
a.slice(2, 6) // ["c"]

2、將類似數(shù)組的對象轉(zhuǎn)為真正的數(shù)組棺耍。

Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 }) // ['a', 'b']
Array.prototype.slice.call(document.querySelectorAll("div"));

3.2.3.7 splice方法

splice方法用于刪除元素贡未,并可添加新元素。返回值是被刪除的元素蒙袍。

第一個參數(shù)是刪除的起始位置俊卤,
第二個參數(shù)是被刪除的元素個數(shù)(可以為0)。
更多的參數(shù)表示要被插入數(shù)組的新元素害幅。

var a = ["a","b","c"];
a.splice(1,1) // ["b"] a變?yōu)閇"a","c"]
a.splice(1,0,'X')  // ["b"] a變?yōu)閇"a","X","c"]
a.splice(1,2,9,8)  // ["b"] a變?yōu)閇"a",9,8]

3.2.3.8 sort方法

排序消恍,默認是按照字典順序排序。排序后以现,原數(shù)組將被改變狠怨。
可以接受一個參數(shù),表示按照自定義方法進行排序邑遏。

var list=[3,2,5];
list.sort(); // 2,3,5
list.sort(funtion(a,b){
    return b-a;
}); // 5,3,2

3.2.4 ECMAScript 5 新加入的數(shù)組方法

map佣赖、forEach、filter记盒、every憎蛤、some、reduce纪吮、reduceRight與函數(shù)式操作有關(guān)俩檬。它們可以在數(shù)組或類似數(shù)組的對象上使用。
其參數(shù)是一個函數(shù)碾盟,這個函數(shù)本身又接受三個參數(shù):數(shù)組的當前元素elem棚辽、該元素的位置index和整個數(shù)組arr。
另外冰肴,上下文對象(context)可以作為第二個參數(shù)屈藐,傳入forEach(), every(), some(), filter(), map()方法榔组,用來綁定函數(shù)運行時的上下文。

3.2.4.1 map方法联逻,forEach方法

//map方法對數(shù)組的每個元素執(zhí)行一個函數(shù)瓷患,所有結(jié)果返回一個新數(shù)組。
var a = [1, 2, 3]
var a2 = a.map(function(elem, index, arr){
    return elem + elem;
});
console.log(a); //[1, 2, 3]
console.log(a2); //[2, 4, 6]

//通過call方法可以將map用在類似數(shù)組的對象上遣妥。
var b = [].map.call("abc", function(elem, index, arr){
    return elem + elem;
});
console.log(b); //["aa", "bb", "cc"]

//forEach和map類似擅编,區(qū)別是不返回新數(shù)組(可以改變原數(shù)組的值)。
var c = [1, 2, 3];
var c2 = c.forEach(function(elem, index, arr){
    arr[index] = elem * index;
    return elem;
});
console.log(c); //[0, 2, 6]
console.log(c2); //undefined

//還可以接受第二個參數(shù)箫踩,用來綁定函數(shù)中的this關(guān)鍵字爱态。
[1, 2, 3].map(function(elem, index, arr){
    this.push(elem * elem); //this指向out變量
}, out);

3.2.4.2 filter方法

filter對所有成員調(diào)用一個函數(shù),所有結(jié)果為true的成員組成一個新數(shù)組返回境钟。(c#的Where)

[1,2,3,4,5].filter(function(elem){
    return (elem>3);     
})
// [4,5]

filter方法還可以有兩個可選參數(shù)index锦担、arr,分別是當前數(shù)組成員的位置和整個數(shù)組慨削。

[1, 2, 3, 4, 5].filter(function(elem, index, arr){
    return index % 2 === 0;
});
// [1, 3, 5]

3.2.4.3 some方法洞渔,every方法

some 判斷是否存在滿足條件的元素。

[1, 2, 3, 4, 5].some(function(elem, index, arr){
    return elem >= 3;
});
// 返回true

every 判斷是否所有元素都滿足條件缚态。

[1, 2, 3, 4, 5].every(function(elem, index, arr){
return elem >= 3;
});
// 返回false

3.2.4.4 reduce方法(歸約)磁椒,reduceRight方法

reduce 依次處理數(shù)組的每個元素,最終累計為一個值玫芦。(c#的Aggregate)

[1, 2, 3, 4, 5].reduce(function(x, y,index,arr){
    console.log(index); //跳過0浆熔,直接從1開始
    return x*y;
});
//120

可以對對累計變量指定初值。(和Aggregate一樣)
reduceRight就是從右向左執(zhí)行reduce桥帆。

[1, 2, 3, 4, 5].reduceRight(function(x, y){
  return x+y;
}, '---');
// ---54321

3.2.4.5 indexOf 和 lastIndexOf

indexOf方法返回給定元素在數(shù)組中第一次出現(xiàn)的位置医增,如果沒有出現(xiàn)則返回-1。
lastIndexOf找最后一個老虫。

['aa','bb','cc'].indexOf('b') //-1
['aa','bb','cc'].indexOf('bb') //1

3.2.4.6 鏈式使用

如果返回值依然是數(shù)組叶骨,當然就可以鏈式使用了。比如:map祈匙、forEach忽刽、filter

3.3 包裝對象和Boolean對象

3.3.1 包裝對象

可以將原始類型的值(數(shù)值、字符串菊卷、布爾值)變成對象缔恳,這就是“包裝對象”宝剖。

var v1 = new Number(123);
var v2 = new String("abc");
var v3 = new Boolean(true);
typeof v1 // "object"
v1 === 123 // false

包裝對象使原始類型也可以調(diào)用Object的原生方法洁闰。

3.3.1.1 包裝對象的構(gòu)造函數(shù)

Number、String和Boolean這三個原生對象有兩種用万细。
1扑眉、構(gòu)造函數(shù)
2纸泄、方法(相當于生成實例后再調(diào)用valueOf方法)

new Number(123); //[object Number]
Number(123); //123

3.3.1.2 包裝對象實例的方法

1、valueOf
返回對應的原始類型的值腰素。

new Boolean("true").valueOf()
// true

2聘裁、toString
返回對應的原始類型值的字符串形式。

new Boolean("true").toString()
// "true"

3.3.1.3 原始類型的自動轉(zhuǎn)換

原始類型可以自動調(diào)用定義在其包裝對象上的方法和屬性弓千。
包括三個包裝對象各自定義在實例上的方法衡便。

"abc".length // 3
'abc'.charAt === String.prototype.charAt // true

實質(zhì)是字符串被JavaScript引擎自動轉(zhuǎn)為String對象的實例,然后調(diào)用這個實例的length屬性洋访。得到返回值后镣陕,再自動銷毀這個臨時的包裝對象實例。

自定義方法
還可以在原型上添加自定義方法和屬性姻政。

String.prototype.double = function (){
    return this.valueOf() + this.valueOf();
};
"abc".double() // abcabc

但是呆抑,這種自定義方法和屬性的機制,只能定義在包裝對象的原型上汁展,想要直接對原始類型的變量添加屬性鹊碍,則無效。

var s = "abc";
s.p = 123;
s.p // undefined

3.3.2 Boolean對象

3.3.2.1 構(gòu)造函數(shù)

用于生成布爾值的包裝對象的實例食绿。

var b = new Boolean(true);
typeof b // "object"
b.valueOf() // true

3.3.2.2 工具方法

將任意值轉(zhuǎn)為布爾值侈咕。
(undefined、null器紧、+0乎完、-0、''品洛、NaN為false树姨,其它都是true)

使用not運算符(!)也可以達到同樣效果。

var a = "false";
new Boolean(a).valueOf() // true
Boolean(a) // true
!!a // true

注意:對象被自動類型轉(zhuǎn)換為布爾時桥状,結(jié)果都是true帽揪。

if (Boolean(false)) 
    console.log('true'); // 無輸出

if (new Boolean(false))
    console.log('true'); // true

3.3.3 Number對象

3.3.3.1 構(gòu)造函數(shù)

var n = new Number(1);
typeof n // "object"。

3.3.3.2 工具方法

請看“數(shù)據(jù)類型轉(zhuǎn)換”

3.3.3.3 Number對象的屬性

正無限(POSITIVE_INFINITY)
負無限(NEGATIVE_INFINITY)
NaN
MAX_VALUE
MIN_VALUE

3.3.3.4 Number對象實例的方法

1辅斟、Number.prototype.toString()
Number對象有單獨的toString方法转晰,它可以接受一個參數(shù)(表示進制)。

(3).toString() // "3"
(3).toString(2) // "11"
3.toString(2) // SyntaxError //JavaScript引擎解釋成小數(shù)點
3..toString(2) // "11" //兩個點就會理解成調(diào)用對象屬性

3.5.toString() // "3.5" //可以直接對一個小數(shù)使用toString方法

3['toString'](2) // "11" //通過方括號運算符也可以調(diào)用toString方法士飒。

將其他進制的數(shù)查邢,轉(zhuǎn)回十進制,需要使用parseInt方法酵幕。

2扰藕、Number.prototype.toFixed()
將一個數(shù)轉(zhuǎn)為指定位數(shù)的小數(shù)。

(3).toFixed(2)// "3.00"
(3.005).toFixed(2)// "3.01"

3芳撒、Number.prototype.toExponential()
將一個數(shù)轉(zhuǎn)為科學計數(shù)法形式邓深。

(10).toExponential(1)// "1.0e+1"
(1234).toExponential(1)// "1.2e+3"

4未桥、Number.prototype.toPrecision()
將一個數(shù)轉(zhuǎn)為指定位數(shù)的有效數(shù)字。

(12.34).toPrecision(1)// "1e+1"
(12.34).toPrecision(2)// "12"
(12.34).toPrecision(3)// "12.3"
(12.34).toPrecision(5)// "12.340"

toPrecision方法用于四舍五入時不太可靠

5芥备、自定義方法
同樣冬耿,Number.prototype對象上面可以自定義方法,被Number的實例繼承萌壳。

Number.prototype.add = function (x) {
  return this + x;
};
(8).add(2) // 10

3.3.4 String

3.3.4.1 構(gòu)造函數(shù)

var s = new String("abc");
typeof s // "object"

3.3.4.2 工具方法

String(true) // "true"
String(5) // "5"

3.3.4.3 String.fromCharCode()

該方法根據(jù)Unicode編碼亦镶,生成一個字符串。

String.fromCharCode(104, 101, 108, 108, 111)
// "hello"

注意袱瓮,該方法不支持編號大于0xFFFF的字符染乌。這種情況下,只能使用四字節(jié)的UTF-16編號懂讯。

String.fromCharCode(0xD842, 0xDFB7)
// "??"

3.3.4.4 實例對象的屬性和方法

1荷憋、length屬性
返回字符串的長度。

2褐望、charAt 和 charCodeAt 方法

  • charAt返回字符串指定位置的字符勒庄。
  • charCodeAt方法返回給定位置字符的Unicode編碼(十進制表示)。
  • 如果給定位置為負數(shù)瘫里,或者過大实蔽,則這兩個方法返回NaN(或"")。

示例:

"abc".charAt(1) // "b"
"abc".charAt(-1) // ""
"abc".charAt(3) // ""

"abc".charCodeAt(1) // 98
"abc".charCodeAt(-1) // NaN
"abc".charCodeAt(3) // NaN

chatAt可以用下標代替:

"abc"[1] // "b"

注意:如果遇到Unicode大于65536的字符(即第一個字節(jié)在U+D800到U+DBFF之間)谨读,就要連續(xù)使用兩次charCodeAt局装。

"張".charCodeAt(0) // 23534
"張".charCodeAt(1) // 65533

3、concat方法
連接多個字符串(原來的字符串不受影響)劳殖。

"a".concat("bb") // abb
"a".concat("bb","c") // abbc

其實字符串連接用加號(+)就好铐尚。

4、substring方法哆姻,substr方法和slice方法

  • substring(a,b) 取從a到b(不包括b)位置的子串宣增。如果a小于b,則兩個參數(shù)互換矛缨。
  • slice(a,b) 和substring唯一不同是爹脾,如果a小于b,兩個參數(shù)不互換箕昭,返回空字符串灵妨。
  • substr(a,b) 取從a開始長度為b的子串。

示例:

var s = "abcde";
s.substring(2, 3); // "c"
s.substring(3, 2); // "c"
s.slice(2, 3); // "c"
s.slice(3, 2); // ""
s.substr(2, 3); // "cde"
s.substr(3, 2); // "de"
  • 如果沒有第二個參數(shù)落竹,表示一直取到字符串結(jié)束泌霍。
  • 如果參數(shù)為負:
    substring,自動將負數(shù)轉(zhuǎn)為0筋量。
    slice烹吵,負數(shù)表示從尾部開始計算。
    substr桨武,第一個參數(shù)是負數(shù)表示從尾部開始計算肋拔;負第二個參數(shù)是負數(shù)將被轉(zhuǎn)為0。

示例:

"Hello World".slice(-3) // "rld"
"Hello World".slice(4,-3) // "o Wo"
"Hello World".substring(-3) // "Hello World"
"Hello World".substring(4,-3) // "Hell"
"Hello World".substr(-3) // "rld"
"Hello World".substr(4,-3) // ""

5呀酸、indexOf 和 lastIndexOf 方法
都用來確定一個字符串在另一個字符串中的位置凉蜂。lastIndexOf從尾部開始匹配。

"hello world".indexOf("o") // 4
"hello world".lastIndexOf("o") // 7

它們還可以接受第二個參數(shù)性誉,表示從該位置開始匹配窿吩。

"hello world".indexOf("o", 6) // 7
"hello world".lastIndexOf("o", 6) // 4

6、trim 方法
去除字符串兩端的空格错览。(不改變原字符串)

"  hello  ".trim() // "hello"

7纫雁、toLowerCase 和 toUpperCase 方法
toLowerCase轉(zhuǎn)小寫,toUpperCase轉(zhuǎn)大寫倾哺。

"Hello".toLowerCase() // "hello"
"Hello".toUpperCase() // "HELLO"

8轧邪、localeCompare方法
比較兩個字符串。返回值小于0羞海,表示第一個字符串屑捎蕖;大于0却邓,表示第一個字符串大;等于0硕糊,表示相等。

'apple'.localeCompare('banana') // -1
'apple'.localeCompare('apple') // 0

9腊徙、搜索和替換

  • match:返回匹配的子字符串數(shù)組(默認只返第一個)简十。找不到則返回null。
  • search:返回第一個匹配的位置撬腾。找不到則返回-1勺远。
  • replace:替換匹配的字符串(默認只替換第一個)。
  • split:分割字符串时鸵,返回分割后的數(shù)組胶逢。
    (如省略分割規(guī)則,則返回數(shù)組的唯一成員就是原字符串饰潜。)

示例:

var matchs="abcdefabcdef".match("bc");
console.log(matchs); // ["bc"]
console.log(matchs.index); // 1
console.log(matchs.input); // "abcdefabcdef"
var matchs2="abcdefabcdef".match(/bc/g);
console.log(matchs2); // ["bc", "bc"]
//matchs2就沒有index和input了

console.log("abcdefabcdef".search("bc")); // 1

console.log("Cat,dog cat,mice".replace(/cat/gi,"*")); // "*,dog *,mice"

console.log("|a,b|c".split()); // ["|a,b|c"]
console.log("|a,b|c".split(/,|\|/)); // ["", "a", "b", "c"]

3.4 Math對象

Math是JavaScript的內(nèi)置對象初坠,提供一系列數(shù)學常數(shù)和數(shù)學方法。它不能作為構(gòu)造函數(shù)或工具函數(shù)使用彭雾。

3.4.1 屬性

E:常數(shù)e碟刺。。
PI:常數(shù)Pi薯酝。

3.4.2 方法

1半沽、round 四舍五入爽柒。(注意:負數(shù)和正數(shù)有不同)

console.log(Math.round(1.4)); //1
console.log(Math.round(1.5)); //2
console.log(Math.round(-1.5)); //-1
console.log(Math.round(-1.6)); //-2

2、abs方法者填,max方法浩村,min方法

Math.abs(-1) // 1
Math.max(2, -1, 5) // 5
Math.min(2, -1, 5) // -1

3、floor(小于參數(shù)的最大整數(shù))占哟,ceil(大于參數(shù)的最小整數(shù))

Math.floor(3.2) // 3
Math.floor(-3.2) // -4
Math.ceil(3.2) // 4
Math.ceil(-3.2) // -3

4心墅、pow(指數(shù)),sqrt(平方根)

Math.pow(2, 2) // 4
Math.pow(2, 3) // 8
Math.sqrt(4) // 2
Math.sqrt(-4) // NaN //如第一參數(shù)是負值榨乎,則返回NaN怎燥。

5、log(e的自然對數(shù))蜜暑,exp方法(10的對數(shù))

6铐姚、random 0到1之間的偽隨機數(shù)。(左閉右開)

Math.random() // 0.7151307314634323
// 返回給定范圍內(nèi)的隨機數(shù)
Math.random() * (max - min) + min;

7肛捍、三角函數(shù)方法

3.5 Date對象

3.5.1 概述

3.5.1.1 Date()

返回當前日期和時間的字符串谦屑。

3.5.1.2 new Date()

返回值為當前時間的Date對象

var date1 = Date();
var date2 = new Date();
typeof date1; // string
typeof date2; // object

3.5.1.3 new Date(milliseconds)

參數(shù)為從1970年1月1日UTC開始計算的毫秒數(shù)篇梭。

new Date(3600*24*1000); // 1970年1月2日

3.5.1.4 new Date(datestring)

參數(shù)是Date.parse()能接受的字符串氢橙。

new Date("2013-02-15")

3.5.1.5 new Date(year, month [, day, hours, minutes, seconds, ms])

注意:如果只有一個數(shù)值參數(shù),那將被當做毫秒數(shù)恬偷。
月從0開始計算悍手,0表示1月 (可為負數(shù)或很大的數(shù))
天從1開始計算,0表示上個月最后一天 (可為負數(shù)或很大的數(shù))
年的0袍患,表示1900年坦康;負數(shù),則表示公元前诡延。

new Date(2015); // 1970.1.1 8點多
new Date(2015,0); // 2015.1.1
new Date(2015,1); // 2015.2.1
new Date(2015,0,-1); // 2014.12.30
new Date(2015,0,0); // 2014.12.31
new Date(2015,0,1); // 2015.1.1
new Date(2015,1,0); // 2015.1.31
new Date(2015,1,1); // 2015.2.1
new Date(2015,1,29); // 2015.3.1
new Date(1,0); // 1901.1.1
new Date(0,0); // 1900.1.1
new Date(-1,0); // -1.1.1

3.5.1.6 日期的運算

兩個日期對象進行減法滞欠,返回的是間隔毫秒數(shù);
進行加法肆良,返回的是兩個字符串的連接筛璧。

3.5.2 Date對象的方法

3.5.2.1 Date.now()

返回距離1970年1月1日的毫秒數(shù)。

Date.now() // 1364026285194

另:window.performance.now()返回頁面加載到命令運行時已經(jīng)過去的毫秒數(shù)惹恃。

3.5.2.2 Date.parse()

返回字符串表示的時間距離1970年1月1日UTC的毫秒數(shù)或NaN夭谤。

Date.parse("Aug 9, 1995") // 807897600000

3.5.2.3 Date.UTC()

默認Date對象返回的是當前時區(qū)的時間。Date.UTC方法可以返回UTC時間巫糙。

用法與Date構(gòu)造函數(shù)完全一致朗儒。

3.5.3 Date實例對象的方法

3.5.3.1 Date.prototype.toString()

toString是默認的調(diào)用方法,所以如果直接讀取Date對象實例,就相當于調(diào)用實例的toString方法醉锄。

new Date().toString(); // Mar 04 2015 17:56:06
new Date(); // Mar 04 2015 17:56:06

3.5.3.1 Date.prototype.toUTCString()乏悄,Date.prototype.toISOString()

new Date().toUTCString(); // Mar 04 2015 9:56:06

3.5.3.1 Date.prototype.toDateString(),Date.prototype.toTimeString()

toDateString返回日期部分的字符串恳不,
toTimeString返回時間部分的字符串檩小。

new Date().toDateString(); // Mar 04 2015

3.5.3.1 Date.prototype.toLocaleDateString(),Date.prototype.toLocaleTimeString()

toLocaleDateString返回日期的當?shù)貙懛ǎ?br> toLocaleTimeString返回時間的當?shù)貙懛ā?/p>

new Date().toLocaleDateString(); // 2015/3/4
new Date().toLocaleTimeString(); // 下午6:11:04

3.5.3.1 Date.prototype.valueOf()

返回距離1970年1月1日UTC的毫秒數(shù)妆够,等同于getTime方法识啦。

new Date().valueOf() // 1362790014817
new Date().getTime() // 1362790014817

3.5.3.1 Date.prototype.get系列方法

  • .getTime():返回距離1970年1月1日的毫秒數(shù)负蚊,等同于valueOf方法神妹。
  • .getDate():返回對應每個月的幾號(從1開始)。
  • .getDay():返回星期(0-6)家妆,星期日為0鸵荠。
  • .getFullYear():返回四位的年份。
  • .getMonth():返回月份(0-11)伤极。
  • .getHours():返回小時(0-23)蛹找。
  • .getMilliseconds():返回毫秒(0-999)。
  • .getMinutes():返回分鐘(0-59)哨坪。
  • .getSeconds():返回秒(0-59)庸疾。

上面的方法返回的都是當前時區(qū)的時間,Date對象還提供了這些方法對應的UTC版本当编,比如getUTCFullYear()等届慈。

3.5.3.1 Date.prototype.set系列方法

.setDate(date):設置實例對象對應的每個月的幾號(1-31),返回改變后毫秒時間戳忿偷。
.setFullYear(year [, month, date]):設置四位年份金顿。
.setHours(hour [, min, sec, ms]):設置小時(0-23)。
.setMilliseconds():設置毫秒(0-999)鲤桥。
.setMinutes(min [, sec, ms]):設置分鐘(0-59)揍拆。
.setMonth(month [, date]):設置月份(0-11)。
.setSeconds(sec [, ms]):設置秒(0-59)茶凳。
.setTime(milliseconds):設置毫秒時間戳嫂拴。

new Date().setFullYear(0,0,1)); // 0年1月1日 18:24:44 

3.5.3.1 Date.prototype.toJSON()

返回JSON格式的日期對象。

jsonDate = new Date().toJSON();
console.log(jsonDate); // 2015-03-04T10:28:54.215Z
var backToDate = new Date(jsonDate);
console.log(backToDate); // Date對象

3.6 RegExp對象

3.6.1 概述

創(chuàng)建正則表達式有兩種方法:
1贮喧、使用字面量顷牌,以斜杠表示開始和結(jié)束。
2塞淹、使用RegExp構(gòu)造函數(shù)

var regex = /xyz/ig; // ig是修飾符
var regex = new RegExp("xyz","ig");

3.6.2 正則對象的屬性和方法

3.6.2.1 屬性

  • ignoreCase:只讀 表示是否設置了i修飾符窟蓝。
  • global:只讀 表示是否設置了g修飾符。
  • lastIndex可讀可寫,只有設置了g才有意義 返回下一次開始搜索的位置运挫。
  • source:只讀 返回正則表達式的字符串形式(不包括反斜杠)状共。
  • multiline:只讀 表示是否設置了m修飾符。

示例:

var r = /abc/igm;

r.ignoreCase // true
r.global // true
r.multiline // true
r.lastIndex // 0
r.source // "abc"

3.6.2.2 test方法

1谁帕、驗證字符串是否符合某個模式峡继。

/CAT/i.test('cats and dogs') // true

2、如果正則表達式帶有g(shù)修飾符匈挖,則每次test方法都從上一次結(jié)束的位置開始向后匹配碾牌。
顯然這個是通過閉包實現(xiàn)的,如果不能對同一個RegExp對象交叉?zhèn)魅氩煌膮?shù)儡循,以免出錯舶吗。

var r = /x/g;
var s = '_x_x';

r.lastIndex // 0
r.test(s) // true

r.lastIndex // 2
r.test(s) // true

r.lastIndex // 4
r.test(s) // false
r.lastIndex // 0

3、如果正則模式是一個空字符串择膝,則匹配所有字符串誓琼。

new RegExp("").test("abc")// true

3.6.2.3 exec方法

返回匹配結(jié)果。
匹配成功肴捉,返回數(shù)組腹侣,里面包括(匹配結(jié)果、input齿穗、index)傲隶。匹配失敗,返回null窃页。

var reg = /x/g ;
var r = reg.exec('_x_x') // ["x"]  //r.index是1
r = reg.exec('_x_x') // ["x"]  //r.index是3
r = reg.exec('_x_x') // null 

如果RegExp里包含圓括號跺株,則返回的數(shù)組會包括多個元素。第一個元素是整個匹配結(jié)果腮出,后面的元素就是圓括號對應的匹配結(jié)果帖鸦。整個返回數(shù)組的length屬性等于匹配成功的組數(shù)+1。

var s = 'x_x';
var r = /
(x)/;

r.exec(s) // ["_x", "x"]
上面代碼的exex方法胚嘲,返回一個數(shù)組作儿。第一個元素是整個匹配的結(jié)果,第二個元素是圓括號匹配的結(jié)果馋劈。

var r = /a(b+)a/g;
var s = "_abbba_aba_";
while(true) {
    var match = r.exec(s);
    if (!match) break;
    console.log(match,match[1]);
}
//["abbba", "bbb"] "bbb"
//["aba", "b"] "b"

如果正則對象是一個空字符串攻锰,則exec方法會匹配成功,但返回的也是空字符串妓雾。

3.6.3 字符串對象的方法

3.6.3.1 match:查找匹配的子字符串娶吞。

'_x_x'.match(/x/) // ["x"]

與正則對象的exec方法非常類似:匹配成功返回一個數(shù)組,失敗返回null械姻。
但如果正則帶有g(shù)修飾符妒蛇,則會返回所有匹配成功的結(jié)果。

'_x_x'.match(/x/g) // ["x","x"]

3.6.3.2 search:搜索。

返回第一個滿足條件的匹配結(jié)果的位置绣夺,或-1吏奸。
該方法會忽略g參數(shù)。

'_x_x'.search(/x/)// 1

3.6.3.3 replace:替換陶耍。

replace的第一個參數(shù)是搜索模式奋蔚,第二個是要替換為的內(nèi)容。
搜索模式如果不加g修飾符烈钞,就替換第一個匹配成功的值泊碑,否則替換所有。

"aaa".replace("a", "B") // "Baa"
"aaa".replace(/a/, "B") // "Baa"
"aaa".replace(/a/g, "B") // "BBB"

replace方法的第二個參數(shù)可以使用美元符號$毯欣,用來指代所替換的內(nèi)容馒过。

  • $& 指代匹配的子字符串。
  • $` 指代匹配結(jié)果前面的文本仪媒。
  • $' 指代匹配結(jié)果后面的文本沉桌。
  • $n 指代匹配成功的第n組內(nèi)容谢鹊,n從1開始計數(shù)(當然了算吩,因為第0組是全部匹配結(jié)果啊)。
  • $$ 指代美元符號$佃扼。

示例:

"abc".replace("b", "[$`-$&-$']")// "a[a-b-c]c"
"hello world".replace(/(\w+)\s(\w+)/,"$2 $1")// "world hello"

第二個參數(shù)還可以是一個函數(shù)偎巢,將匹配內(nèi)容替換為函數(shù)返回值。

3.6.3.4 split:分割兼耀。

split的第一個參數(shù)是分隔規(guī)則压昼,第二個是返回數(shù)組的最大成員數(shù)。

'a,  b,c, d'.split(',')      // [ 'a', '  b', 'c', ' d' ]
'a,  b,c, d'.split(/, */)    // [ 'a', 'b', 'c', 'd' ]
'a,  b,c, d'.split(/, */, 2) // [ 'a', 'b' ]

如果正則表達式帶有括號瘤运,則括號匹配的部分也會作為數(shù)組成員返回窍霞。

"aaa*a*".split(/(a*)/)// [ '', 'aaa', '*', 'a', '*' ]
'a,  b  ,  '.split(/ *(,) */)// ["a", ",", "b", ",", ""]

3.6.4 匹配規(guī)則

3.6.4.1 字面量字符和元字符

大部分字符在正則表達式中,就是字面的含義拯坟,比如/a/匹配a但金,/b/匹配b。它們都叫做“字面量字符”(literal characters)郁季。
還有一部分字符有特殊含義冷溃,不代表字面的意思。它們叫做“元字符”(metacharacters)梦裂。

1似枕、點(.)
匹配除回車(\r)、換行(\n)年柠、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符凿歼。

2、位置字符
^ 表示字符串的起首独旷。
$ 表示字符串的行尾词爬。

3懂拾、選擇符(|)

/11|22/.test("911") // true

3.6.4.2 字符類

字符類(class)表示有一系列字符可供選擇阱冶,只要匹配其中一個就可以了饰恕。所有可供選擇的字符都放在方括號內(nèi)贯被。

/[abc]/.test("apple") // true

1荤牍、脫字符(^)
如果方括號內(nèi)的第一個字符是[^]氧敢,則表示除了字符類之中的字符侯嘀,其他字符都可以匹配另凌。

/[^abc]/.test("xyz"); // true
/[^abc]/.test("xyc"); // true
/[^abc]/.test("ac"); // false

注意,脫字符只有在字符類的第一個位置才有特殊含義戒幔,否則就是字面含義吠谢。

2、連字符(-)
-不出現(xiàn)在方括號之中诗茎,就不是連字符工坊。

/a-c/.test(" a-c "); // true //這個-不是連接符
/a-c/.test("-"); // false //這個-不是連接符
/[3-5]/.test("a3b"); // true //這個-是連接符
[1-31] //這個不代表1到31,只代表1到3敢订。

3王污、重復類
{} 表示模式的重復次數(shù)。{n}表示重復n次楚午,{n,}表示至少重復n次昭齐,{n,m}表示重復不少于n次,不多于m次矾柜。

/lo{2}k/.test("look") // true
/lo{2,5}k/.test("looook") // true

4阱驾、量詞符
? 表示某個模式出現(xiàn)1次或0次,等同于{0, 1}怪蔑。

  • 表示某個模式出現(xiàn)0次或多次里覆,等同于 {0,}。
  • 表示某個模式出現(xiàn)1次或多次缆瓣,等同于 {1,}喧枷。

以上三個量詞符,默認都是貪婪模式捆愁。比如割去,對于字符串“aaa”來說,/a+/將會匹配“aaa”昼丑,而不會匹配“aa”呻逆。
如果要改為非貪婪模式,可以在量詞符后面加一個問號菩帝。比如咖城,/a+?/將會只匹配“a”茬腿。

/a+/.exec("aa"); // ["aa"]
/a+?/.exec("aa"); // ["a"]
/^a+?/.exec("aa"); // ["a"]

5、轉(zhuǎn)義符
正則模式中宜雀,需要用斜杠轉(zhuǎn)義的切平,一共有12個字符:^、.辐董、[悴品、$、(简烘、)苔严、|、孤澎、+届氢、?、{覆旭、\退子。
注意:
如果使用RegExp創(chuàng)建正則對象,轉(zhuǎn)義需要使用兩個斜杠*型将,因為字符串內(nèi)部會先轉(zhuǎn)義一次寂祥。

/1\+1/.test("1+1") // true
(new RegExp("1\\+1")).test("1+1") // true

6、修飾符

  • g(global) 全局匹配

默認第一次匹配成功后茶敏,正則對象就停止向下匹配壤靶。
加上g后缚俏,每次都是從上一次匹配成功處繼續(xù)向后匹配惊搏。

var regex = /b/g;
regex.test('abba'); // true
regex.test('abba'); // true
regex.test('abba'); // false
  • i(ignorecase) 忽略大小寫

默認正則對象區(qū)分大小寫。
加上i后忽略大小寫忧换。

/abc/.test("ABC") // false
/abc/i.test("ABC") // true
  • m(multiline) 多行模式

默認正則對象會將換行符當作算入字符串的開頭或結(jié)尾恬惯。
加上m后,正則對象會忽略字符串頭部或尾部的換行符亚茬,即^和$會忽略換行符酪耳。

/world$/.test("hello world\n") // false
/world$/m.test("hello world\n") // true

7、預定義模式
預定義模式指的是某些常見模式的簡寫方式刹缝。

\d 匹配0-9之間的任一數(shù)字碗暗,相當于[0-9]。
\D 匹配所有0-9以外的字符梢夯,相當于[^0-9]言疗。
\w 匹配任意的字母、數(shù)字和下劃線颂砸,相當于[A-Za-z0-9_]噪奄。
\W 除所有字母死姚、數(shù)字和下劃線以外的字符,相當于/[^A-Za-z0-9_]/ 勤篮。
\s 匹配空格(包括制表符都毒、空格符、斷行符等)碰缔,相等于[\t\r\n\v\f]账劲。
\S 匹配非空格的字符,相當于[^\t\r\n\v\f]金抡。
\b 匹配詞的邊界涤垫。
\B 匹配非詞邊界,即在詞的內(nèi)部竟终。

8蝠猬、特殊字符
正則對象對一些不能打印的特殊字符,提供了表達形式统捶。

\n 匹配換行鍵榆芦。
\r 匹配回車鍵。
\t 匹配制表符tab(U+0009)喘鸟。
\v 匹配垂直制表符(U+000B)匆绣。
\f 匹配換頁符(U+000C)。
\0 匹配null字符(U+0000)什黑。

9崎淳、組匹配
正則表達式的括號表示分組匹配,括號中的模式可以用來捕獲分組的內(nèi)容愕把。

var m = "abcabc".match(/(.)b(.)/);
m // ["abc", "a", "c"]

注意拣凹,使用組匹配時,不宜同時使用g修飾符恨豁,否則match方法不會捕獲分組的內(nèi)容嚣镜。

var m = "abcabc".match(/(.)b(.)/g);
m // ["abc", "abc"]

上面代碼使用帶g修飾符的正則表達式,結(jié)果match方法只捕獲了匹配整個表達式的部分橘蜜。

在正則表達式內(nèi)部菊匿,可以用\n引用括號匹配的內(nèi)容,n是從1開始的自然數(shù)计福,表示對應順序的括號跌捆。

/(.)b(.)\1b\2/.test("abcabc");
/(.)b(.)\1b\2/.test("abcXbc");
  • 非捕獲組 (?:x)

表示不返回該組匹配的內(nèi)容。

var m = "abc".match(/(?:.)b(.)/);
m[1] // "c" //如果是match(/(.)b/)則m[1]是"a"

var url = /(http|ftp):\/\/([^/\r\n]+)(\/[^\r\n]*)?/;
url.exec("http://google.com/"); // ["http://google.com/", "http", "google.com", "/"]

var url = /(?:http|ftp):\/\/([^/\r\n]+)(\/[^\r\n]*)?/;
url.exec("http://google.com/"); // ["http://google.com/", "google.com", "/"]
  • 先行斷言 x(?=y)

表示x只有在y前面才匹配象颖,y不會被計入返回結(jié)果佩厚。

var m = "abc".match(/b(?=c)/);
m // "b"
  • 后行斷言 x(?!y)

表示x只有不在y前面才匹配,y不會被計入返回結(jié)果力麸。

var m = "abd".match(/b(?!c)/);
m // ["b"]

3.7 JSON對象

3.7.1 JSON格式

對象:是一個無序的“‘名稱/值’對”集合可款。

{string:value, ...string:value}

數(shù)組:是值(value)的有序集合育韩。

[value, ...value]


字符串(必須雙引號)、
數(shù)值(必須十進制)闺鲸、
布爾值筋讨、
null、
JSON格式的對象摸恍、
JSON格式的數(shù)組悉罕。

3.7.2 JSON對象

JSON.stringify()
將一個值轉(zhuǎn)為JSON字符串。
正則對象會被轉(zhuǎn)成空對象立镶。
JSON.stringify方法還可以接受一個數(shù)組參數(shù)壁袄,指定需要轉(zhuǎn)成字符串的屬性。還可以接受一個函數(shù)來更改默認的字符串化的行為媚媒。

JSON.parse()
將JSON字符串轉(zhuǎn)化成值嗜逻。

var aaa={id:123,name:"dgl"};
JSON.stringify(aaa);  // "abc"
JSON.stringify("abc"); // {"id":123,"name":"dgl"}
JSON.parse('"abc"'); // abc
JSON.parse('{"id":123,"name":"dgl"}'); //對象{id: 123, name: "dgl"}

3.8 ArrayBuffer:類型化數(shù)組

略。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缭召,一起剝皮案震驚了整個濱河市栈顷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嵌巷,老刑警劉巖萄凤,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搪哪,居然都是意外死亡靡努,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門晓折,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惑朦,“玉大人,你說我怎么就攤上這事已维⌒朽停” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵垛耳,是天一觀的道長。 經(jīng)常有香客問我飘千,道長堂鲜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任护奈,我火速辦了婚禮缔莲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘霉旗。我一直安慰自己痴奏,他們只是感情好蛀骇,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著读拆,像睡著了一般擅憔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上檐晕,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天暑诸,我揣著相機與錄音,去河邊找鬼辟灰。 笑死个榕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的芥喇。 我是一名探鬼主播西采,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼继控!你這毒婦竟也來了苛让?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤湿诊,失蹤者是張志新(化名)和其女友劉穎狱杰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厅须,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡仿畸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了朗和。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错沽。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眶拉,靈堂內(nèi)的尸體忽然破棺而出千埃,到底是詐尸還是另有隱情,我是刑警寧澤忆植,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布放可,位于F島的核電站,受9級特大地震影響朝刊,放射性物質(zhì)發(fā)生泄漏耀里。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一拾氓、第九天 我趴在偏房一處隱蔽的房頂上張望冯挎。 院中可真熱鬧,春花似錦咙鞍、人聲如沸房官。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翰守。三九已至孵奶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潦俺,已是汗流浹背拒课。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留事示,地道東北人早像。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像肖爵,于是被迫代替她去往敵國和親卢鹦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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