// slice /* slice() 方法提取部分的数组元素,返回包含提取元素的新数组,不会改变原数组
语法: arrayObject.slice(start, end) 参数: start(必选):开始下标,可以为负数(负数时从数组的尾部开始计算) end(可选):指定提取部分的结束下标(截取部分不包括end下标的元素,截止到下标为(end-1)的元素 没有end时,默认截取到数组包含start到数组结束的所有元素,也可以为负数 当start和end之间,无任何元素时,返回[]数组 */ var array = [10,20,30,40,60] console.log(array.slice(1)); console.log(array.slice(-3)); console.log(array.slice(5)); console.log(array.slice(1,4)); console.log(array.slice(1,-2));
var str = 'good morning' console.log(str.slice(1,-3));
/* splice(数组) splice()方法从数组中删除一个或多个元素,在删除元素位置添加一个或多个元素, 返回一个包含删除元素的新数组。注意:该方法会改变原数组 语法: arrayObject.splice(start,deleteNumber,item1,...) start(必选): 删除元素的开始位置,可为负数,负数从数组的尾部开始计算 deleteNumber(必选):删除元素的个数,为0时,不删除任何元素 item1,...,itemN:添加的新元素,没有该项时,不会添加任何元素
*/ array.splice(1,2,'hello') console.log(array); array.splice(1,0,[200,100]) console.log(array); /* split(字符串) split()方法在指定的位置,将字符串分割成字符串数组,返回字符串数组,不会改变原字符串 语法:stringObject.split(separator, maxLength) separator(必选):分割字符串的指定位置(字符串或正则表达式),为("")空字符时,字符串的每个字符都将被分割。 maxLength(可选):返回字符串数组的最大长度(number),需返回数组的一部分使用此项。没有时,返回整个字符串分割的数组,不考虑长度。 */ var str1="How are you doing today?"
document.write(str1.split(" ") + "<br />") document.write(str1.split("") + "<br />") document.write(str1.split(" ",1))
/* join(数组) join()方法将数组中的所有元素以特定分隔符分割,放入到一个字符串中。返回一个字符串,不会改变原数组。
语法: arrayObject.join(separator) 参数: separator(可选): 指定的分割符,不设置该项,默认以逗号分割 */ var arr = [1,2,3,4,5,6,'aa'] console.log(arr.join("+")); // 2. 举例说明强制类型转换和隐式类型转换? /* 强制 parseInt(),parseFloat,Number() 隐式 ==, !! */ // 3.判断一个变量是否是数组的方法? /* 1.instanceof 例:var a = [] a instanceof Array 如果是true 则是数组
2.原型prototype + isPrototypeOf() isPrototypeOf() 函数 : 用于指示对象是否存在于一个对象的原型链中。 如果存在返回true,反之返回false。该方法属Object对象,由于所有的对象都继承了Object的对象实例, 因此几乎所有的实例对象都可以使用该方法。如果variable的原型链中存在Array对象,就会返回true,也就说明variable是数组类型。
3.数组方法 isArray() Array.isArray(variable)
*/ // 4. 什么是原型对象? 什么是原型链? /* proto: 隐式原型,所有对象都具有该属性,一个对象的隐式原型指向构造该对象的构造函数的原型。 prototype: 显示原型,每个函数在创建后都拥有一个prototype属性,该属性指向函数的原型对象。
#作用 proto:是用来构造原型链,用于实现基于原型的继承。保证了实例可以访问到构造函数原型中定义的属性和方法。 prototype: 用来实现基于原型的继承与属性的共享。
#二者关系 隐式原型指向构造该对象的构造函数(constructor)的prototype。
#图解 原型图解
构造函数Foo() 构造函数的原型属性Foo.prototype指向了原型对象,在原型对象中的所有属性和方法,都可以通过构造函数Foo声明的实例(f1,f2)共享。
原型对象Foo.prototype Foo.prototype保存着所有实例共享的属性和方法,原型对象中有一个constructor属性,指向构造函数。
实例 f1、f2 是通过Foo声明的实例,这两个对象中都保存这__proto__属性,指向该实例构造函数的原型对象(Foo.prototype),因此f1、f2就可以访问构造函数原型对象中的所有属性和方法。
注意 构造函数Foo()除了是方法外也是对象,也有__proto__属性,指向它的构造函数的原型对象,即Function.prototype。 Function(),Object()也是同理。 最终的Object.prototype的__proto__指向null。
#实例
let one = {a:0}; let two = new Object();
one.proto === one.prototype // true two.proto === two.prototype // true one.toString === one.proto.toString // true
所有的内置对象都是由Object()创建而来。 如: Array.prototype.proto === Object.prototype // true
构造函数: function Foo(){} let test = new Foo(); Foo.prototype.proto === Object.prototype // true test.proto === Foo.prototype // true
原型继承:
继承实例 functiong Boo(){} Foo.prototype = new Boo(); Foo.porototype.proto === Boo.prototype // true Foo.prototype.constructor === Boo // true
继承对象 Foo.prototype = { a: 1, b: 2 } Foo.prototype.proto === Object.prototype // true 以上两种情况都是重写了Foo.prototype实现的继承,所以Foo.prototype.constructor也被重写。
*/