咱們在js中操做字符串,每每是將它轉換爲數組,再操做,如:html
split('').reverse().join('')
MDNvue
start能夠是任意整數,默認值爲 0。若是 start < 0 則查找整個字符串(如同傳進了 0)。若是 start >= str.length,則該方法返回 -1,除非被查找的字符串是一個空字符串,此時返回 str.lengthes6
var str = 'JavaScript'; str.indexOf('av'); // 1 str.indexOf('av',2); // -1 str.indexOf('',11); // 10 str.indexOf('',8); // 8
str.includes(substr[, start]) => ES6方法判斷 substr 是否被包含在 str 中,若是是返回true,不然返回false正則表達式
var str = 'To be, or not to be, that is the question.';segmentfault
str.includes('To be'); // true str.includes('To be', 1); // false str.includes('TO BE'); // false
var str = "To be, or not to be, that is the question."; str.startsWith("To be"); // true str.startsWith("not to be"); // false str.startsWith("not to be", 10); // true
全部對象繼承了這兩個轉換方法toString:
返回一個反映這個對象的字符串valueOf:
返回它相應的原始值api
var arr = [1,2,3] var obj = { a: 1, b: 2 } console.log(arr.toString()) // => 1,2,3 console.log(obj.toString()) // => [object Object] // 那咱們修改一下它原型上的 toString 方法呢 Array.prototype.toString = function(){ return 123 } Object.prototype.toString = function(){ return 456 } console.log(arr.toString()) // => 123 console.log(obj.toString()) // => 456 // 咱們看下其他類型轉換出來的結果, 基本都是轉換成了字符串 console.log((new Date).toString()) // => Mon Feb 05 2018 17:45:47 GMT+0800 (中國標準時間) console.log(/\d+/g.toString()) // => "/\d+/g" console.log((new RegExp('asdad', 'ig')).toString()) // => "/asdad/gi" console.log(true.toString()) // => "true" console.log(false.toString()) // => "false" console.log(function(){console.log(1)}.toString()) // => "function (){console.log(1)}" console.log(Math.random().toString()) // => "0.2609205380591437"
var arr = [1,2,3] var obj = { a: 1, b: 2 } console.log(arr.valueOf()) // => [1, 2, 3] console.log(obj.valueOf()) // => {a: 1, b: 2} // 證實valueOf返回的是自身的原始值 // 一樣咱們修改下 valueOf 方法 Array.prototype.valueOf = function(){ return 123 } Object.prototype.valueOf = function(){ return 456 } console.log(arr.valueOf()) // => 123 console.log(obj.valueOf()) // => 456 // valueOf轉化出來的基本都是原始值,複雜數據類型Object返回都是自己,除了Date 返回的是時間戳 console.log((new Date).valueOf()) // => 1517824550394 //返回的並非字符串的世界時間了,而是時間戳 console.log(/\d+/g.valueOf()) // => 456 當咱們不設置時valueOf時,正常返回的正則表式自己:/\d+/g,只是咱們設置了 Object.prototype.valueOf 因此返回的時:456 console.log(Math.valueOf()) // => 456 同上 console.log(function(){console.log(1)}.valueOf()) // => 456 同上
1.數組
var a = { toString: function() { console.log('你調用了a的toString函數') return 8 } } console.log( ++a) // 你調用了a的toString函數 // 9 // 當你設置了 toString 方法, 沒有設置 valueOf 方法時,會調用toString方法,無視valueOf方法
2.dom
var a = { num: 10, toString: function() { console.log('你調用了a的toString函數') return 8 }, valueOf: function() { console.log('你調用了a的valueOf函數') return this.num } } console.log( ++a) // 你調用了a的valueOf函數 // 11 // 而當你二者都設置了的時候,會優先取valueOf方法, 不會執行toString方法
引入lodash庫的_.template()
函數
// Use the "interpolate" delimiter to create a compiled template. var compiled = _.template('hello <%= user %>!'); compiled({ 'user': 'fred' }); // => 'hello fred!'
/** * Camelize a hyphen-delimited string.//駝峯化一個連字符鏈接的字符串 */ var camelizeRE = /-(\w)/g; var camelize = cached(function (str) { return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ‘‘; }) }); /** * Capitalize a string.//對一個字符串首字母大寫 */ var capitalize = cached(function (str) { return str.charAt(0).toUpperCase() + str.slice(1)//把第一個字符串的首個字符大寫,把除第一個字符的字符串返回與大寫的首字符拼接 }); /** * Hyphenate a camelCase string.用字符號鏈接一個駝峯的字符串 */ var hyphenateRE = /([^-])([A-Z])/g; var hyphenate = cached(function (str) { return str .replace(hyphenateRE, ‘$1-$2‘)//$1爲正則表達式匹配的第一個元素$2爲第二個元素 .replace(hyphenateRE, ‘$1-$2‘) .toLowerCase()//使之最小化 });
/** * Check if a string starts with $ or _ */ function isReserved (str) { var c = (str + '').charCodeAt(0) return c === 0x24 || c === 0x5f }
《JavaScript經典實例》
js 基礎總結(經常使用的反轉)
vue源碼解析this