Day7
1-分别说明 split slice splice join 方法的作用和参数,并举例
1-分别说明 split slice splice join 方法的作用和参数,并举例
用法:array.slice(start,end)
解释:截取数组中的某段,并返回一个新的数组;
参数start:开始截取的索引 (取的到 =),
参数end: 结束的索引(取不到 < end)(可选)
//如果不传入参数二,那么将从参数一的索引位置开始截取,一直到数组尾
var a=[1,2,3,4,5,6]; var b=a.slice(0,3); //[1,2,3] var c=a.slice(3); //[4,5,6]
//如果两个参数中的任何一个是负数,array.length会和它们相加,试图让它们成为非负数,举例说明:
//当只传入一个参数,且是负数时,length会与参数相加,然后再截取
var a=[1,2,3,4,5,6];
var b=a.slice(-1); //[6]
//当只传入一个参数,是负数时,并且参数的绝对值大于数组length时,会截取整个数组
var a=[1,2,3,4,5,6];
var b=a.slice(-6); //[1,2,3,4,5,6]
var c=a.slice(-8); //[1,2,3,4,5,6]
//当传入两个参数一正一负时,length也会先于负数相加后,再截取
var a=[1,2,3,4,5,6];
var b=a.slice(2,-3); //[3]
//当传入一个参数,大于length时,将返回一个空数组
var a=[1,2,3,4,5,6];
var b=a.slice(6); //[]
2>slice(字符串)
用法:string.slice(start,end)
解释:slice方法复制string的一部分来构造一个新的字符串,用法与参数和数组的slice方法一样
//举个简单的例子
var a="i am a boy";
var b=a.slice(0,6); //"i am a"
用法:array.splice(start,deleteCount,item,...,itemx)
解释:splice方法从array中移除一个或多个元素,并用新的item替换它们。参数start是从数组array中移除元素的开始位置。参数deleteCount是要移除的元素的个数。
如果有额外的参数,那么item会插入到被移除元素的位置上。它返回一个包含被移除元素的数组。
var a=['a','b','c'];
var b=a.splice(1,1,'e','f'); //a=['a','e','f','c'],b=['b']
此外splice与delete两者的区别,上篇文章有解释过。
js删除数组中的元素delete和splice的区别
separator 翻译:分隔器
4>split(字符串)
用法:string.split(separator,limit) 解码 字符串转数组
解释:split方法把这个string分割成片段来创建一个字符串数组。可选参数limit可以限制被分割的片段数量。separator参数可以是一个字符串或一个正则表达式。如果
separator是一个空字符,会返回一个单字符的数组。
//再举一个简单的例子
var a="0123456";
var b=a.split("",3); //b=["0","1","2"]
5>arr.join(separator) 编码 数组转字符串
解释:把数组中的元素按照参数中的字符串连接成一个字符串。
//举一个简单的例子
var arr = [2, 3, 4, 7];
console.log(arr.join('-'));//2-3-4-7
字符转数值:
parseInt():从左向右依次转换,能转则转,不能转停止;如果第一位就不能转,直接NaN;不识别小数点。
parseFloat():等同于parseInt,同时可以识别小数点
Math.round():严格转换,不允许出现任何非数字的字符,否则NaN;取最接近的整数
Number():严格转换,不允许出现任何非数字的字符,否则NaN;直接转换
-、*、/:利用数学运算符的隐式转换,把数值转换成字符
数值转字符:
toString():直接将数值转换成字符
toFixed():直接转换,参数为保留的小数位数
+:利用数学运算符的隐式转换,+连接一个空字符
其他类型的转换:
用+、-、*、/ 对true、false、null进行转换可得,true为1,false为0,null为0
场景——数学运算符:+ - * /
规则:
+:当任意一边出现字符时,“+”会把数值类型转换成字符类型,此时 + 代表拼接 //"1"+1=11;
-、*、/:出现纯数字字符时,会转换成数值类型处理,出现非数字类型时,会出现“NaN //1-"1"=0;
场景——关系运算符:> < >= <= != == ===
规则:
当只有一边为纯数字字符时,会转换成数值比较 //22<"44" 会转化为 22<44; true
当两边全部是数字字符时,会按照字符串对比的规则对比(逐位比较,得到结果,停止比较) //"2">"12" true
==:若有字符类型会转换成数值类型,比较的是值 //1=="1"; true
===:若有字符类型不会转换,比较的是值和数据类型,全等 //1==="1"; false
场景——if语句:
规则:
0、“”、null、undefined、NaN在if的()内会转换为false
3-判断一个变量是否是数组的方法?(2-3 种)
1. typeof真的那么厉害吗??
//首先看代码
var ary = [1,23,4];
console.log(typeof ary); //输出结果是Object
上面的办法并不能实时的检测出是否是数组,只能判断其类型,所以说typeof判断基本类型数据还是挺好的,但是不能准确测试出是否是数组(typeof的具体用法以后提及,现在回归正题)
2.instanceof 判断
var ary = [1,23,4];
console.log(ary instanceof Array) //true;
从输出的效果来看,还是挺令人满意的,能准确的检测出数据类型是否是数组,不要高兴的太早,大家先想想这个的缺点,我们接着说第三种方法
3.原型链方法
var ary = [1,23,4];
console.log(ary.__proto__.constructor==Array); //true
console.log(ary.constructor==Array) //true 这两段代码是一样的
总结一下第2种方法和第3种方法局限性
instanceof 和constructor 判断的变量,必须在当前页面声明的,比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个ary,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor;会返回false;
原因:
1、array属于引用型数据,在传递过程中,仅仅是引用地址的传递。
2、每个页面的Array原生对象所引用的地址是不一样的,在子页面声明的array,所对应的构造函数,是子页面的Array对象;父页面来进行判断,使用的Array并不等于子页面的Array;切记,不然很难跟踪问题!
4.通用的方法
var ary = [1,23,4];
function isArray(o){
return Object.prototype.toString.call(o)== '[object Array]';
}
console.log(isArray(ary));
函数的原型对象
prototype
属性上,而非对象实例本身。