字符串方法总结
- length 属性返回字符串的长度
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = txt.length;
/*
sln=26
*/
- indexOf() 方法返回字符串中指定文本首次出现的索引(位置)
var str = "The full name of China is the People's Republic of China.";
var pos = str.indexOf("China");
- lastIndexOf() 方法返回指定文本在字符串中最后一次出现的索引
var str = "The full name of China is the People's Republic of China.";
var pos = str.lastIndexOf("China");
- lastIndexOf() 方法向后进行检索(从尾到头),这意味着:假如第二个参数是 50,则从位置 50 开始检索,直到字符串的起点。
var str = "The full name of China is the People's Republic of China.";
var pos = str.lastIndexOf("China", 50);
- search() 方法搜索特定值的字符串,并返回匹配的位置:
var str = "The full name of China is the People's Republic of China.";
var pos = str.lastIndexOf("China", 50);
- slice() 提取字符串的某个部分并在新字符串中返回被提取的部分。
var str = "Apple, Banana, Mango";
var res = str.slice(7,13);
/*
如果某个参数为负,则从字符串的结尾开始计数。
这个例子裁剪字符串中位置 -12 到位置 -6 的片段
*/
var str = "Apple, Banana, Mango";
var res = str.slice(-13,-7);
/*
res=="Banana"
*/
- substring() 类似于 slice()。
不同之处在于 substring() 无法接受负的索引。
var str = "Apple, Banana, Mango";
var res = str.substring(7,13);
- substr() 类似于 slice()。
不同之处在于第二个参数规定被提取部分的长度。
var str = "Apple, Banana, Mango";
var res = str.substr(7,6);
- replace() 方法用另一个值替换在字符串中指定的值,replace() 方法不会改变调用它的字符串。它返回的是新字符串。
默认地,replace() 只替换首个匹配且replace() 对大小写敏感。
str = "Please visit Microsoft!";
var n = str.replace("Microsoft", "W3School");
/*
如需执行大小写不敏感的替换,请使用正则表达式 /i(大小写不敏感)
*/
str = "Please visit Microsoft!";
var n = str.replace(/MICROSOFT/i, "W3School");
/*
如需替换所有匹配,请使用正则表达式的 g 标志(用于全局搜索)
*/
str = "Please visit Microsoft and Microsoft!";
var n = str.replace(/Microsoft/g, "W3School");
- toUpperCase() 把字符串转换为大写:
var text1 = "Hello World!"; // 字符串
var text2 = text1.toUpperCase(); // text2 是被转换为大写的 text1
- toLowerCase() 把字符串转换为小写:
var text1 = "Hello World!"; // 字符串
var text2 = text1.toLowerCase(); // text2 是被转换为小写的 text1
- concat() 连接两个或多个字符串,concat() 方法可用于代替加运算符
var text1 = "Hello";
var text2 = "World";
text3 = text1.concat(" ",text2)
- trim() 方法删除字符串两端的空白符:
var str = " Hello World! ";
alert(str.trim());
- charAt() 方法返回字符串中指定下标(位置)的字符串:
var str = "HELLO WORLD";
str.charAt(0); // 返回 H
- charCodeAt() 方法返回字符串中指定索引的字符 unicode 编码
var str = "HELLO WORLD";
str.charCodeAt(0); // 返回 72
- split() 将字符串转换为数组:
var txt = "a,b,c,d,e"; // 字符串
txt.split(","); // 用逗号分隔
txt.split(" "); // 用空格分隔
txt.split("|"); // 用竖线分隔
作用域
变量作用域分为两种:全局作用域和局部作用域
- 全局作用域:最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的。
<script>
var outerVar = "outer";
function fn(){
console.log(outerVar);
}
fn();//result:outer
</script>
- 局部作用域:只在固定的代码片段内可访问到,而对于函数外部是无法访问的
<script>
function fn(){
var innerVar = "inner";
}
fn();
console.log(innerVar);// ReferenceError: innerVar is not defined
</script>
- 在函数内部声明变量的时候一定要使用,一定要使用var命令,否则实际是声明了一个全局变量
<script>
function fn(){
innerVar = "inner";
}
fn();
console.log(innerVar);// result:inner
</script>
- 只要函数内定义了一个局部变量,函数在解析的时候都会将这个变量“提前声明”所以下面代码中第一个scope的结果为global
<script>
var scope = "global";
function fn(){
console.log(scope);//result:undefined
var scope = "local";
console.log(scope);//result:local;
}
fn();
</script>
闭包
闭包的作用:
1、读取自身函数外部的变量
2、让这些外部变量始终保存在内存中
需要注意的是js函数内的变量值不是在编译的时候就确定的,而是等在运行时期再去寻找的。正如下面的代码中返回的不是0 1而是2 2
<script>
function outer(){
var result = new Array();
for(var i = 0; i < 2; i++){//注:i是outer()的局部变量
result[i] = function(){
return i;
}
}
return result;//返回一个函数对象数组
//这个时候会初始化result.length个关于内部函数的作用域链
}
var fn = outer();
console.log(fn[0]());//result:2
console.log(fn[1]());//result:2
</script>
想要result数组函数返回我们期望的值就需要吧i 当参数传进去,但是这样虽然可以得到期望的结构,但是却不算闭包了,需要arg(num)在函数内部在定义一个内部函数,这样result返回的就是innerarg()函数
<script>
function outer(){
var result = new Array();
for(var i = 0; i < 2; i++){
//定义一个带参函数
function arg(num){
function innerarg(){
return num;
}
return innerarg;
}
//把i当成参数传进去
result[i] = arg(i);
}
return result;
}
var fn = outer();
console.log(fn[0]());
console.log(fn[1]());
</script>