高程第五章(引用类型)

引用类型是一种数据结构,它被称为类,但是这种称呼并不妥当,不具备传统的面向对象语言所支持的类和接口等基本结构。

Array.isArray()最终确定某个值到底是不是数组。

var color = [‘red‘,‘blue‘,‘green‘];
console.log(color.toString());//red,blue,green
console.log(color.valueOf());//[ ‘red‘, ‘blue‘, ‘green‘ ]
console.log(color.toLocaleString());//red,blue,green

数组:栈方法

var colors = new Array();
var count = colors.push("red","greend");
console.log(count);//2
count = colors.push("blcak");
console.log(count);//3
var item = colors.pop();
console.log(item);//black

数组中的最大值

var arr = [0,1,2,3,4,8,5,1,4,1,1,111,111];
var max = Math.max(0,1,2,3,4,8,5,1,4,1,1,111,111);
var min = Math.min(0,1,2,3,4,8,5,1,4,1,1,111,111);
console.log(max);
console.log(min);
var value = [0,2,11,8,55,13];
var max = Math.max.apply(Math,value);
console.log(max);//55

数组拼接

var a = [1,2];
var b = [3,4];
console.log(a.concat(b));//[ 1, 2, 3, 4 ]

数组indexOf,找不到的话返回-1

var numbers = [1,12,3,4,5,8,6,8];
console.log(numbers.indexOf(8));
console.log(numbers.lastIndexOf(8));
console.log(numbers.lastIndexOf(9));

迭代方法

var numbers = [1,2,3,4,5,6,7,6,5,4,3,2,1];
var every = numbers.every(function(item,index,array){
    return (item > 2)
})
console.log(every);//false
var some = numbers.some(function(item,index,array){
    /*console.log(item);
    console.log(index);
    console.log(array);*/
    return (item > 2)
})
console.log(some);//true
var filterR = numbers.filter(function(item,index,arr){
    return (item > 2)
})
console.log(filterR);//[ 3, 4, 5, 6, 7, 6, 5, 4, 3 ]

var mapR = numbers.map(function(item,index,arr){
    return (item*2 )
})
console.log(mapR);//[ 2, 4, 6, 8, 10, 12, 14, 12, 10, 8, 6, 4, 2 ]

var forEachR = numbers.forEach(function(item,index,arr){

})
console.log(forEachR);//undefined

归并方法

var values = [0,1,2,3,4,5,6];
var sum  = values.reduce(function(a,b,c,d){
    return a+b
})
console.log(sum);//21

数组排序

var values = [0,5,10,7,8,2,3];
console.log(values.reverse());
/*function compare(a,b){//因为直接用sort会直接用字符串 也可以调换顺序改变升序降序
    if (a<b) {
        return -1
    }else if (a>b){
        return 1;
    }else{
        return 0
    }
}*/
function compare(a,b){
    return a-b
}
console.log(values.sort(compare));

slice

var colors = ["red","blue","green","black","arr"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
console.log(colors2);
console.log(colors3);

spilce

var colors = [‘red‘,‘green‘,‘blue‘,‘blcak‘,‘arr‘];
var removed = colors.splice(0,1);
console.log(colors);//[ ‘green‘, ‘blue‘, ‘blcak‘, ‘arr‘ ]
console.log(removed);//[ ‘red‘ ]
// 2
removed = colors.splice(1,0,‘yellow‘,‘orange‘);
console.log(colors);//[ ‘green‘, ‘yellow‘, ‘orange‘, ‘blue‘, ‘blcak‘, ‘arr‘ ]
console.log(removed);//[ ]
// 3
removed = colors.splice(1,1,"red","purple");
console.log(colors);//[ ‘green‘, ‘red‘, ‘purple‘, ‘orange‘, ‘blue‘, ‘blcak‘, ‘arr‘ ]
console.log(removed);//[ ‘yellow‘ ]

字符串操作方法  http://www.cnblogs.com/littledu/archive/2011/04/18/2019475.html  区别

var str = "hello word";
console.log(str.charAt(1));//e
console.log(str.charCodeAt(1));//字符编码101
console.log(str.concat("nihao"));//hello wordnihao
console.log(str.slice(3));//lo word没有指定第二个参数就到结束
console.log(str.slice(3,7));//lo w 到第七个字符
//lo wordstart    必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
//end    可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
console.log(str.substring(3,7));//lo w substring()总是以较小的参数作为start,较大的作为end,而不会在意参数的位置
console.log(str.substring(3))//lo word
//slice可以对数组操作,substring不行。。
console.log(str.substr(3,7));//lo word三开始7指定返回字符
console.log(str.indexOf("o"));//返回位置,没有就返回-1   4
console.log(str.lastIndexOf("o"));//返回位置,没有就返回-1   7;
var str2 = "    hell   o  word   ";
console.log(str2.trim());//删除最前面和最后面的空格
console.log(String.fromCharCode(104,101,108,108,111));

Date日期操作

var someDate = new Date(Date.parse("2011/11/11"));
console.log(someDate);//2011-11-10T16:00:00.000Z
var oldTime = (new Date("2011-11-11")).getTime(); //得到毫秒数
var newTime = new Date(oldTime); //就得到普通的时间了
console.log(oldTime);//1321013410000
console.log(newTime);//2011-11-11T12:10:10.000Z
var start = Date.now();
dosomething();
var stop = Date.now();
result = strat - stop

函数内部属性 arguments和this

function outer(){//更松散的耦合
    inner();
}
function inner(){
    console.log(inner.caller);//[Function: outer]//指向caller
}
outer()

arguments.callee.caller

function outer(){//更松散的耦合
    inner();
}
function inner(){
    console.log(arguments.callee.caller);//[Function: outer]
}
outer()

函数的属性和方法

每个函数都包含两个属性:length和prototype,length表示函数希望接受的命名参数的个数

prototype:

无法枚举,所以无法使用for-in;

每个函数包含两个非继承而来的方法:apply()和call();

apply()方法接受两个参数:一个是运行函数的作用域,另一个是参数数组,第二个可以是array实例

function sum(num1,num2){
    return num1+num2
}
function callSum1(num1,num2){
    return sum.apply(this,arguments)
}
function callSum2(num1,num2){
    return sum.apply(this,[num1,num2])
};
console.log(callSum1(10,10));//20
console.log(callSum2(10,10));//20

call()方法与apply()方法的作用相同,它们的区别仅次于接受参数的方式不同,对于call()方法而言,第一个参数是this值没有变化,变化的是其余参数都直接传给函数,换句话说,在使用call方法时,传递给函数的参数必须逐个列举出来

function sum(num1,num2){
    return num1+num2
}
function callSum1(num1,num2){
    return sum.call(this,num1,num2)
}
console.log(callSum1(10,10));//20

如果打算直接传入arguments对象,或者函数中先接收到的也是一个数组,那么使用apply()方法更方便,否则选择call()方法更合适。(在不给函数传递参数的情况下,使用哪个都无所谓)

传递参数并非call(),apply()真正用武之地,它们真正强大的地方是能够扩充函数赖以生存的作用域。

window.color = "red";
var o = {color:"blue"};
function sayColor(){
    console.log(this.color);
}
sayColor()//red;
sayColor.call(this)//red
sayColor.call(window)//red
sayColor.call(o)//bule

使用call()(或者apply())方法来扩充作用域最大的好处是对象不需要与方法有任何的耦合关系

ES5中还有bind()方法

window.color ="red";
var o = {color:"buld"};
function sayColor(){
    console.log(this.color);
}
var objSayColor = sayColor.bind(o);
objSayColor()//blue

引用类型与基本包装类型的主要区别就是对象的生存期。

Number类型

var num = 10;
console.log(num.toString());//10
console.log(num.toString(2));//1010
console.log(num.toString(8));
console.log(num.toString(10));
console.log(num.toString(16));
console.log(num.toFixed(3));// 小数点位数10.000
console.log(num.toExponential(10));//1.0000000000e+1
console.log(num.toPrecision(3));//精密的

eval()方法 :

在eval("var msg=‘hello‘");

alert(msg)//"hello world"

在eval()中创建的任何变量和函数都不会被提升,在严格模式下,访问不到eval()中创建的任何变量和函数,因此前面两个例子都会导致错误

时间: 2024-10-30 02:05:54

高程第五章(引用类型)的相关文章

第五章 引用类型

Object类型 大多数引用类型的值都是Object类型的实例. 创建Object的实例: 1.使用Object构造函数 var person = new Object(); person.name = "Nicholas"; person.age = 29; 2.字面量表示法(花括号) var person = { name : "Nicholas", age : 29 }; var person = {}; //与new Object()相同 通过字面量定义对象

JavaScript高级程序设计学习笔记第五章--引用类型(函数部分)

四.Function类型: 1.函数定义的方法: 函数声明:function sum (num1, num2) {return num1 + num2;} 函数表达式:var sum = function(num1, num2){return num1 + num2;};//注意有个分号 构造函数的方式:var sum = new Function("num1", "num2", "return num1 + num2");// 2.函数的重复声

第五章 引用类型--笔记1

引用类型是一种数据结构,用于将数据和功能组织在一起. 对象是某个特定引用类型的实例,新对象的创建可以用new关键字+构造函数,也可以用对象字面量进行创建. 注意:用对象字面量方法创建对象时,最后一个属性值的后面不能添加逗号,否则会在ie7及更早版本和opera中导致错误. 如果以数值来作为属性名的话,这个属性名会自动转换为字符串. var someObj = {};  等价于   var someObj = new Object(); 函数传递的参数中有多个可选参数的话,最好的做法是对那些必须值

第五章——引用类型

JS的引用类型重点讲Object,array和function等几种 1.Object对象 创建对象有两种方式:1.new出一个Object的实例:2.使用对象字面量来创建对象,在对象字面量中,使用逗号分隔不同的属性,但最后一个属性的后面不能再添加逗号,在IE7以前的版本会报错.        使用对象字面量,属性名可以使用字符串: 这里的数字5,会自动转化为字符串"5",注意 实际使用中,更偏向对象字面量的方法,这种方法简单,要求代码少. 输出 访问对象属性可以使用点表示法,还可以使

第五章 引用类型 基本包装类型

为了便于操作基本类型值,ECMAScript 提供了3 个特殊的引用类型:Boolean.Number 和String.实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据.来看下面的例子. var s1 = "some text"; var s2 = s1.substring(2); 当第二行代码访问s1 时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值.而在读取模式中访问字符串时,后台都会自动完成下

第五章 引用类型&gt; Object类型

概念:引用类型的值(对象)是引用类型的一个实例.有时也被称为对象定义,描述的是一类对象所具有的属性和方法. var person = new Object(); 创建一个Object的新实例,保存在变量Person中.使用的构造函数是Object,它为新对象定义默认的属性和方法. 5.1 Object类型 创建Object实例的俩种方法 1.使用new操作符,后面跟一个Object构造函数. var Person = new Object(); person.name = "Nicholas&q

《JavaScript高级程序设计第五章--引用类型》之Object对象和array对象

这一章主要就是介绍各种内置对象的用法,认识其经常用到的属性和方法. 5.1Object类型 创建objec的方式,一种是new Object(),一种是对象字面量(简化创建包含大量属性的对象的过程) var person = { name = "Nicholas"; age = 27 };//最后一个属性不必添加逗号,ie7等会导致错误 //在使用对象字面量语法时,属性名也可以使用字符串.这里的数值属性会自动转字符串. var person = { "name" :

第五章 引用类型&gt; 基本包装对象

基本包装对象 3种特殊的引用类型:Boolean, Number和String 当读取一个基本类型的值时,后台会创建一个对应的基本包装类型的对象,能够调用一些方法来操作这些数据. var s1 = "some text"; var s2 = s1.substring(2); console.log(s2); // me text //实际上再访问s1值的时候,后台自动完成了下面一系列操作 var s1 = new String(“some text”); //创建一个String类型的

第五章 引用类型--笔记3

关于栈: 栈是一种LIFO的数据结构,也就是后进先出,最后添加的项最早被移除. 栈的插入叫推入,移除叫弹出,只发生在栈的顶部. 数组的栈方法: push(),可传入任意数量的参数,这些参数被逐个添加到数组末尾,该方法返回最终数组的长度. pop(),该方法从数组中移除最后一项并返回该项. 关于队列: 队列数据结构的访问规则不同于栈,它的规则是FIFO,也就是先进先出,最开始添加的项最早被移除. 数组的队列方法: shift(),该方法移除数组第一项并返回该项. shift()和push()配合使