day7
1- 分别说明 split slice splice join 方法的作用和参数,并举例:
split方法用于把字符串分割成字符串数组,接收一个分隔符参数,分隔符可以是用于分解字符串或正则表达式的字符。
1
2
3
4
5
6
7
|
var str = "Hello World" ; var bySpace = str.split( " " ); // ["Hello", "World"] var otherString = "How9are7you2today" ; var byDigits = str.split(/\d/); // ["How", "are", "you", "today"] |
slice方法可以从已有数组中返回指定元素。它接受两个参数,第一个规定从何处开始选取,第二个规定从何处结束选取(不包括该元素)。如果没有传参,则默认为从数组的开 头开始到结尾结束,这是复制整个数组的简单方式。slice返回一个新数组,不会修改原始数组
var arr = ["Cat", "Dog", "Tiger", "Zebra"]; var newArray = arr.slice(1, 3); // 将新数组设置为 ["Dog", "Tiger"]
splice()接收的前两个参数基于调用splice()数组中元素的索引。记住,数组的索引是从 0 开始的(zero-indexed),所以我们要用0来指示数组中的第一个元素。splice()的第一个参数代表从数组中的哪个索引开始移除元素,而第二个参数指示要从数组中删除多少个元素.
1
2
3
4
|
let array = [ 'today' , 'was' , 'not' , 'so' , 'great' ]; array.splice(2, 2); // 从第 3 个元素开始,删除 2 个元素 // 该数组等于 ['today', 'was', 'great'] |
join()用来把数组中的所有元素放入一个字符串,并通过指定的分隔符参数进行分隔。
1
2
3
4
5
6
7
8
9
|
var arr = [ "Hello" , "World" ]; var str = arr.join( " " ); // Sets str to "Hello World" function sentensify(str) { return str.split(/\W/).join( ' ' ); } sentensify( "May-the-force-be-with-you" ); |
2- 举例说明强制类型转换和隐式类型转换?
强制类型转换:
转换为string: toString() / String()
转换为Boolen: Boolen();
转换为number: number() / parseFloat() / parseInt()
隐式类型转换:
字符串加数字,数字就会转成字符串。
数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。
乘,除,大于,小于跟减的转换也是一样。
隐式转换的其他例子
console.log(10+'20') //2010 console.log(10-'20')//-10 number console.log(10-'one') //NaN not a number console.log(10-'101a') //NaN console.log(10*'20') //200 number console.log('10'*'20') //200 number console.log(20/'10') //2 number console.log('20'/'10') //2 number console.log('20'/'one') //NaN
"=="
undefined等于null
字符串和数字比较时,字符串转数字
数字为布尔比较时,布尔转数字
字符串和布尔比较时,两者转数字
console.log(undefined==null) //true console.log('0'==0) //true 字符串转数字 console.log(0==false) //true 布尔转数字 console.log('0'==false) //2个都转成数字 console.log(null==false) //false console.log(undefined==false)//false
3- 判断一个变量是否是数组的方法?
***** Array.isArray() *
通过es6的Array.isArray()判断
let arr = [] console.log(Array.isArray(arr)) //true
***** Object.prototype.toString.call
var arr = [] console.log(Object.prototype.toString.call(arr)) //[object Array] console.log(Object.prototype.toString.call(arr)===Object.prototype.toString.call([])) //true
instanceof
instanceof用来判断一个变量是否是一个对象的实例,我们可以通过instanceof来判断是否为数组
var arr = [] console.log(arr instanceof Array ) //true
constructor
instanceof会将继承Array的对象判断为数组,也可以通过直接判断变量的构造函数是否等于Array来判断
let arr = [1,2,3] console.log(arr.constructor===Array) //true
4- 什么是原型对象?
在js中,分为普通对象和函数对象.
在js中,创建一个函数A, 那么浏览器就会在内存中创建一个对象B,而且每个函数都默认会有一个属性 prototype 指向了这个对象( 即: prototype的属性的值是这个对象 )。这个对象B就是函数A的原型对象,简称函数的原型。这个原型对象B 默认会有一个属性 constructor 指向了这个函数A ( 就是说:constructor属性的值是函数A ).
5- 什么是原型链
当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__
隐式原型上查找,即它的构造函数的prototype
,如果还没有找到就会再在构造函数的prototype
的__proto__
中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链
。