前端基础巩固(字符串)

Posted by Asser's Blog on April 19, 2018

前端基础巩固(字符串篇)

引用一段张鑫旭的话
非计算机专业背景学习JS要点:

非常重要:先要对JS这门语言要有整体、感性的认识;
掌握JS中的字符串、函数、对象、数组、字面量等基本概念,熟记所有内置的方法(包括参数和返回值);
所有继承和原型相关内容跳过,注意,是跳过,不要看!没有这些JS一样可以活得很好,你的日常工作一样玩得飞起,
当然,你没忍住看了相关知识也没关系,因为你会发现自己看不懂的;
DOM事件和所有DOM方法一定要掌握的牢不可破;
学好正则表达式;
然而,要记住JS所有字符串、函数、数组相关的方法,所有DOM相关方法是相当庞大的一项工作,
因为,很容易忘记,方法也很简单,所谓好记性不如烂笔头。
把编辑器的JS自带补全提示干掉,从小交互开始,尝试使用原生的JS书写,写着写着,一定就会记住了,这是最快学习成长的方法。

学习的过程一定是带有痛苦的,并且漫长的,千万不要出现类似“《JavaScript高级程序设计》和《JavaScript语言精粹》我都看完了,
接下来我要学什么的言论”?你以为你是黄蓉啊,看一眼就记住啦!
反复看,看完肯定会忘记,忘记了再看,我也是看这两本书学习JS的,
《JavaScript高级程序设计》这本书已经被我翻到掉页了,《JavaScript语言精粹》上面满满的笔记,哪个知识点不记得了,
基本上一翻就可以准确到对应的页数,因为也是翻了太多遍了。

最终学习是否成功的关键在于__“坚持”__。
字符串
生成方式:
	1. a = 'a'; // 基本类型
	2. a = String('a'); // 基本类型
	3. a = new String('a'); // 引用类型!! a instanceof Object // true
获取单个字符:
	var a = 'abc';
	1. console.log( a.charAt(0) );
	2. console.log( a[0] ); // 此方法不可进行赋值操作
基本字符串和字符串对象的区别
	var a = 'a',
		b = new String('a');
	console.log(typeof a); // 'string'
	console.log(typeof b); // 'object'
	
	var c = '2 + 2',
		d = new String('2 + 2');

	console.log( eval(c) ); // number 4
	console.log( eval(d) ); // string '2 + 2'

	将字符串对象转化成基本字符串的方法
	eval( d.valueOf() );
基础api
	String.prototype.charAt(index)
	params : index (0 ~ length -1)
	return : 特定字符

	String.prototype.charCodeAt(index)
	params : index (0 ~ length -1)
	return : 索引字符的utf-16值

	String.prototype.concat(string2, string3[, ...stringN])
	params : 和字符串链接的多个字符串
	return : 连接完成的新字符串
	更推荐使用 + / += 连接

	String.prototype.inclueds(search_string,[, position])
	params : 要搜索的字符串, position(可选): 从哪个索引位置开始搜索 default:0
	return : true / false

	String.prototype.endsWith(search_string, [, position])  ES6
	params : 要搜索的子字符串, position(可选) : search_string的结束位置 default:字符串结束位置
	return : true / false

	String.prototype.indexOf(search_string, [, from_index])
	params : 被查找的字符串 from_index : 开始查找的位置, default : 0, 若from_index < 0 则查找整个字符串,若from_index > str.length
	一般返回-1, search_string为''时返回str.length
	return : 返回第一次出现的索引,没有则返回-1

	String.prototype.lastIndexOf(search_string, [, from_index])
	搜索最后一个匹配的索引值 参考indexOf

	String.prototype.match(regexp)
	params : 正则对象, 若未传入正则对象,则会隐式的时候new RegExp(obj)转化,不传入任何参数会返回一个['']
	return : 如果匹配到,返回一个数组,数组第一项为完整匹配项,后面的是圆括号捕捉的结果。假如没有匹配返回null
	desc : 如果正则表达式不包含 g 标志,则 str.match() 会返回和 RegExp.exec() 相同的结果。而且返回的 Array 拥有一个额外的 input 属性,该属性包含被解析的原始字符串。另外,还拥有一个 index 属性,该属性表示匹配结果在原字符串中的索引(以0开始)。
	如果正则表达式包含 g 标志,则该方法返回一个 Array ,它包含所有匹配的子字符串而不是匹配对象。捕获组不会被返回(即不返回index属性和input属性)。如果没有匹配到,则返回  null
	
	String.prototype.padEnd(target_length, [, padString])
	desc : 用一个字符串填充当前字符串(如果需要的话,反复填充),返回填充后达到指定长度的字符串。从当前字符串的末尾开始填充。
	params : target_length : 目标长度,若小于str.length 则返回当前字符串 padString:填充字符串,若填充长度超过目标长度则截取,default : ''
	return : 到达指定长度的新字符串

	String.prototype.padStart(target_length, [, padString])
	参看String.prototype.padEnd()

	String.prototype.repeat(count)
	desc : 返回一个包含被连接在一起的指定数量的字符串
	params :  0 < count < str.length
	return : 返回指定字符串指定数量副本的新字符串
	eq : 'abs'.repeat(2) // 'absabs'

	String.prototype.replace(regexp|substr, newStr|function)
	desc : 返回新字符串,原字符串不会改变
	params : substr仅仅替换掉第一个匹配项,function用来创建一个新子字符串的函数,该函数的返回值替换掉第一个参数匹配的结果
	function(match, p1, p2 ..., offset, string); p1, p2表示括号匹配到的参数,offset表示匹配到的偏移量, string表示原字符串

	String.prototype.search(regexp)
	desc : 返回首次匹配的索引
	params : 正则对象(或隐式转换为正则对象)
	return : 首次匹配索引 | -1

	String.prototype.slice(beginSlice, [, endSlice])
	desc : 提取字符串的一部分,并返回新的字符串
	params : beginSlice default:0; 假如为负 则被当做str.length + beginSlice; 
	endSlice默认到字符串末尾,假如为负,则为str.Length + endSlice;
	若endSlice的位置比beginSlice位置靠前,返回''
	return : 提取出的新字符串
	
	String.prototype.split(separator[, limit])
	params : separator 可以是字符串或者正则表达式 limit: 限定返回分割片段的数量
	return : 分割片段组成的数组

	String.prototype.startsWith(search_string, [, position])
	params : position : 起始位置 default : 0
	return : true / false

	String.prototype.substr(start, [, length])
	desc : 返回字符串从指定位置到指定字符数的字符串
	params : start假如为负,则为str.length + start; length:为0或负时,返回空;忽略length则取到字符串尾部
	return : 新字符串

	String.prototype.substring(index_start, [, index_end])
	desc : 返回字符串从开始索引到结束索引之间的子集或者从开始索引到字符串结束之间的子集
	params : 假如参数输入NaN ,则被当做0; 若index_start > index_end 则跟参数位置对调一样
	attention: 是之间的子集 没有取到index_end 
		var a = 'abc';
		a.substring(0, 1); // a

	String.prototype.toLowerCase(str)

	String.prototype.toUpperCase(str)

	String.prototype.valueOf(str_obj)
	desc : 返回string对象的原始值 等同于String.prototype.toString()