咱们在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