符串的創(chuàng)建方式:
var a1='abc'; // 字面量
var a2=new String('abc'); // 構(gòu)造函數(shù)
typeof a1; // "string"
typeof a2; // "object"
// 上面代碼中,變量s1是字符串,s2是對象。所以,String對象也叫包裝對象。
除了用作構(gòu)造函數(shù),String對象還可以當作工具方法使用;
將任意類型的值轉(zhuǎn)為字符串。
String(true); // "true"
String(5); // "5"
// 上面代碼將布爾值ture和數(shù)值5,分別轉(zhuǎn)換為字符串
①.length屬性:
字符串實例的length屬性返回字符串的長度。
例:
'abcdefg'.length // 7
字符串對象是一個類似數(shù)組的對象(很像數(shù)組,但不是數(shù)組)。
new String('cba');
// String {0: "c", 1: "b", 2: "a", length: 3}
(new String('cba'))[1] // "b"
// 上面代碼中,字符串cba對應(yīng)的字符串對象,有數(shù)值鍵(0、1、2)和length屬性,
// 所以可以像數(shù)組那樣取值。
②charAt()方法:
charAt方法返回指定位置的字符,參數(shù)是從0開始編號的位置。
var a=new String("abc");
a.charAt(1); // "b"
a.charAt(a.length - 1); // "c"
// 這個方法完全可以用數(shù)組下標來替代。
'abc'.charAt(1); // "b"
'abc'[1]; // "b"
③slice()方法:
slice方法是用于從原來的字符串中取出子字符串并返回,且不改變原字符串。它的第一個參數(shù)是子字符串的開始位置,第二個參數(shù)是子字符串的結(jié)束位置(注意:不包含該位置)。
'abcdefghij'.slice(0, 4); // "abcd"
// 如果省略第二個參數(shù),則表示子字符串一直到原字符串結(jié)束。
'abcdefghij'.slice(4); // "efghij"
// 如果參數(shù)是負值,表示從結(jié)尾開始倒數(shù)計算的位置,即該負值加上字符串長度。
'abcdefghij'.slice(-6); // "efghij"
'abcdefghij'.slice(0, -6); // "abcd"
'abcdefghij'.slice(-2, -1); // "i"
// 如果第一個參數(shù)大于第二個參數(shù),slice方法返回一個空字符串。
'abcdefghij'.slice(2, 1);
④substring()方法:
substring方法用于從原字符串取出子字符串并返回,不改變原字符串,跟slice()方法很相像。它的第一個參數(shù)表示子字符串的開始位置,第二個位置表示結(jié)束位置(注意:返回結(jié)果不含該位置)。
'abcdefghij'.substring(0, 4); // "abcd"
// 如果省略第二個參數(shù),則表示子字符串一直到原字符串的結(jié)束。
'abcdefghij'.substring(4); // "efghij"
// 如果第二個參數(shù)大于第一個參數(shù),substring方法會自動更換兩個參數(shù)的位置。
'abcdefghij'.substring(10, 4); // "efghij"
// 等同于
'abcdefghij'.substring(4, 10); // "efghij"
⑤substr()方法:
substr()方法用于從原字符串取出子字符串并返回,不改變原字符串,跟slice()和substring()方法的作用相同。
substr()方法的第一個參數(shù)是子字符串的開始位置(從0開始計算),第二個參數(shù)是子字符串的長度。
'abcdefghij'.substr(4, 6); // "efghij"
// 如果省略第二個參數(shù),則表示子字符串一直到原字符串的結(jié)束。
'abcdefghij'.substr(4); // "efghij"
// 如果第一個參數(shù)是負數(shù),表示倒數(shù)計算的字符位置。如果第二個參數(shù)是負數(shù),將被自動轉(zhuǎn)為0,
// 因此會返回空字符串。
'abcdefghij'.substr(-6); // "efghij"
'abcdefghij'.substr(4, -1); // ""
// 上面代碼中,第二個例子的參數(shù)-1自動轉(zhuǎn)為0,表示子字符串長度為0,所以返回空字符串
⑥trim()方法:
trim()方法用于去除字符串兩端的空格,返回一個新字符串,且不改變原字符串。
" hello world ".trim();
// "hello world"
// 該方法去除的不僅是空格,還包括制表符(\t、\v)、換行符(\n)和回車符(\r)。
'\r\naaa \t'.trim(); // 'aaa'
⑦toLowerCase()、toUpperCase()方法:
toLowerCase()方法用于將一個字符串全部轉(zhuǎn)為小寫,toUpperCase()則是用于將一個字符串全部轉(zhuǎn)為大寫。
它們都返回一個新字符串,且不改變原字符串。
'ABC'.toLowerCase();
// "abc"
'abc'.toUpperCase();
// "ABC"
⑧replace()方法:
replace()方法用于替換匹配的子字符串,一般情況下只替換第一個匹配(帶有g(shù)修飾符的正則表達式除外)。
'aaa'.replace('a', 'b') // "baa"
'aaa'.replace(/a/g, 'b') // "bbb"
⑨split()方法:
split()方法按照給定規(guī)則分割字符串,返回一個由分割出來的子字符串組成的數(shù)組。
者 | Jonathan Saring
編輯 | 無明
JavaScript 仍然是 2018 年最受歡迎和使用最為廣泛的編程語言,因此 JavaScript 生態(tài)系統(tǒng)也會繼續(xù)發(fā)展壯大。
然而,JavaScript 的標準庫仍然繼續(xù)保持“短小精悍”的身材。為了填補標準庫功能方面的空白,在過去幾年中,GitHub 上出現(xiàn)了很多流行的 JavaScript 庫。以下列出了 11 個有用的庫,這些庫的維護狀態(tài)均很活躍。
1.Underscore 和 Lodash(dah)
可能大多數(shù)人都知道這兩個庫。Underscore 的目的是為 JavaScript 中的常見任務(wù)提供實用的函數(shù)。Lodash 是下載量最大和被依賴最多的庫之一,旨在為數(shù)組、字符串、object 和 argument 對象提供更一致的跨環(huán)境迭代支持,并已成為 Underscore 的超集。這兩個庫由相同的核心貢獻者維護,在技術(shù)選型時完全可以考慮使用它們。
Lodash - https://github.com/lodash/lodash
Underscore - https://github.com/jashkenas/underscore
2. Ramda
在 GitHub 上的 Star 已經(jīng)超過 12,000,這個庫專為函數(shù)式編程而設(shè)計,可以輕松創(chuàng)建不改變用戶數(shù)據(jù)狀態(tài)的函數(shù)式管道。Ramda 的核心設(shè)計理念是創(chuàng)建具有不變性和無副作用的函數(shù)。所有的函數(shù)會被自動柯里化,并根據(jù)易用性安排參數(shù)的順序。
Ramda - https://github.com/ramda/ramda
3. MathJS
在 GitHub 上的 Star 已經(jīng)超過 6000,這個庫是 JavaScript 和 Node.js 的數(shù)學擴展庫,與 JavaScript 內(nèi)置的 Math 庫兼容。該庫包含一個靈活的表達式解析器,能夠運行符號計算,并提供了一系列內(nèi)置函數(shù)和常量。用戶還可以對其進行擴展。
MathJS - https://github.com/josdejong/mathjs
4. Moment
在 GitHub 上的 Star 已經(jīng)超過 37,000,是一個 JavaScript 日期和時間操作庫,用于解析、驗證、操作和格式化日期。Moment 可以在瀏覽器和 Node.js 中運行。從 2.10.0 版本開始遷移到 ECMAScript 6。
Moment - https://github.com/moment/moment
另外兩個同類的庫:
Date-fns(10,000 個 Star)- https://github.com/date-fns/date-fns
DateJS - https://github.com/datejs/Datejs
5. Sugar
在 GitHub 上的 Star 已經(jīng)超過 3500,主要用于處理本地對象。這個庫支持自定義構(gòu)建,還提供了模塊化的 npm 包,因此可以只使用其中必要的部分模塊(也可以與 Bit 結(jié)合使用),用戶還可以通過自定義方法或使用插件來應(yīng)對特定的使用場景。
Sugar - https://github.com/andrewplummer/Sugar
6. Lazy
在 GitHub 上的 Star 將近 5000,是一個功能強大的 JavaScript 庫,它的 lazy 引擎“盡可能地少做一些工作”,同時保持足夠的靈活性。
Lazy - https://github.com/dtao/lazy.js
7. CollectJS
在 GitHub 上的 Star 超過 3200,主要用于處理 JavaScript 中的數(shù)組和對象,無需其他依賴,提供了幾十個有用的功能和 API,這些 API 幾乎與 Laravel Collections 5.5 相同。該庫的維護狀態(tài)很活躍,值得關(guān)注。
CollectJS - https://github.com/ecrmnn/collect.js
8. ChanceJS
Chance 在 GitHub 上的 Star 超過 3200,一個簡單的隨機對象生成器,用于生成隨機的字符串、數(shù)字等。在編寫自動化測試代碼或任何需要隨機對象的地方,可以用它來減少單調(diào)的工作。
ChanceJS - https://github.com/chancejs/chancejs
9. ChartJS
在 GitHub 上的 Star 將近 40,000 個,提供了 8 種不同類型的數(shù)據(jù)可視化,每種類型都支持動畫和定制。借助 Chart.js,我們可以使用<canvas>標簽創(chuàng)建簡單的HTML5圖表,而且在所有現(xiàn)代瀏覽器中都具有出色的渲染性能。
ChartJS - https://github.com/chartjs/Chart.js
10. Polished
在 GitHub 上的 Star 超過 3500 個,由 styled-components 團隊開發(fā),是一個非常優(yōu)秀的輕量級工具集,支持使用 JavaScript 編寫具有 SASS 風格輔助函數(shù)和 mixin 的樣式。該庫與 styled-components、Aphrodite、Radium 或簡單的內(nèi)聯(lián)樣式兼容。這個庫可以在 GitHub 上找到,Bit 社區(qū)(非官方)也單獨提供所有的功能,因此可以單獨安裝、導(dǎo)入和使用。
Polished - https://github.com/styled-components/polished
Bit 社區(qū)提供的單獨安裝版 - https://bitsrc.io/ranm8/polished
11. Mout
Mout.js 是一組模塊化的 JavaScript 庫,可以在瀏覽器或 node.js 中運行,提供類似于其他語言標準庫(Python、Ruby、PHP 等)中的輔助方法。mout.js 允許僅加載必需的模塊或函數(shù),并提供了一致的 API,規(guī)范了跨瀏覽器行為。
Mout - https://github.com/mout/mout
特別推薦
Bit utils
一個模塊化和高性能的庫,已經(jīng)被用在 Bit 的 web hub 中。這些函數(shù)可使用 NPM/Yarn 進行單獨安裝,用戶也可以創(chuàng)建自己的集合,并從不同的庫和項目中收集有用的功能。
Bit utils - https://bitsrc.io/bit/utils
Voca
一個用于操作字符串的 JavaScript 庫。它提供的功能包括大小寫轉(zhuǎn)換、trim、pad、slugify、latinise、sprintf、truncate、escape 等。用戶可以加載單個函數(shù),以便最小化應(yīng)用程序的構(gòu)建。該庫具有很高的測試覆蓋率,并且不依賴其他庫。
Voca - https://github.com/panzerdp/voca
Licia
只有 400 個 Star,這個有趣的項目基本上是一個簡單但有用的 JavaScript 片段集合,具有很高的測試覆蓋率,文檔也很齊全。
Licia - https://github.com/liriliri/licia
下是JavaScript的一些內(nèi)置對象代碼示例:
1.Math對象:
// 返回隨機數(shù)
Math.random();
// 返回1和10之間的隨機整數(shù)
Math.floor(Math.random() * 10) + 1;
// 返回數(shù)字的平方根
Math.sqrt(25);
2.Date對象:
// 創(chuàng)建一個表示當前時間的Date對象
const today=new Date();
// 創(chuàng)建一個指定日期的Date對象
const christmas=new Date(2023, 11, 25);
// 返回當前月份
today.getMonth();
// 返回當前年份
today.getFullYear();
3.Array對象:
// 創(chuàng)建一個數(shù)組
const fruits=['apple', 'banana', 'orange'];
// 添加元素到數(shù)組末尾
fruits.push('grape');
// 刪除數(shù)組末尾的元素
fruits.pop();
// 獲取數(shù)組長度
fruits.length;
4.String對象:
// 創(chuàng)建一個字符串
const greeting='Hello, world!';
// 獲取字符串長度
greeting.length;
// 將字符串轉(zhuǎn)換為大寫
greeting.toUpperCase();
// 獲取子字符串
greeting.slice(0, 5); // 'Hello'
5.RegExp對象:
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。