JS4-引用对象

引用类型

用于将数据和功能组织在一起。
描述的是一类对象所支持的属性和方法
对象时某种特定引用类型的实例
新对象是使用new操作符跟一个构造函数来创建的。

  • 1.Object类型
  • 2.Array类型
  • 3.Date类型
  • 4.RegExp类型
  • 5.Function类型
  • 6.基本的包装类型
    • 6.1 Boolean
    • 6.2 Number
    • 6.3 String
  • 7.单体内置对象
    • 7.1 Global对象
    • 7.2 Math 对象

Object 类型

对象字面量

var person = {
    name :  "Nicholas",
    age : 19
}

对象访问

  1. 使用点表示法
  2. 使用方括号,方括号可以使用变量来访问属性,并且,可以访问的属性名中可以含有空格。

    person[“name”]
    person.name
    person[“first name”]

Array类型

Array数组可以保存任何类型的数据。

检测数组

ECMAScript 5 中新增 Array.isArray()方法:确定某个值到底是不是数组。

数组对象是一个对象的集合,里边的对象可以是不同类型的。数组的每一个成员对象都有一个“下标”,用来表示它在数组中的位置,是从零开始的

数组定义的方法:

  1. 定义了一个空数组:

    var 数组名= new Array();

  2. 定义时指定有n个空元素的数组:

    var 数组名 =new Array(n);
    3.定义数组的时候,直接初始化数据:

    var 数组名 = [<元素1>, <元素2>, <元素3>…];
    我们定义myArray数组,并赋值,代码如下:

    var myArray = [2, 8, 6];
    说明:定义了一个数组 myArray,里边的元素是:myArray[0] = 2; myArray[1] = 8; myArray[2] = 6。

数组元素使用:

数组名[下标] = 值;

注意: 数组的下标用方括号括起来,从0开始。

数组属性:

length 用法:<数组对象>.length;返回:数组的长度,即数组里有多少个元素。它等于数组里最后一个元素的下标加一。

数组方法:

方法                描述
/*检测数组*/
isArray()        确定某个值到底是不是数组
toSource()        返回该对象的源代码
/*转换方法*/
toString()        把数组转换为字符串,并返回结果
toLocaleString()把数组转换为本地数组,并返回结果
valueOf()        返回数组对象的原始值
join()            把数组的所有元素放入一个字符串。元素通过制定的分隔符进行分隔
/*栈方法*/
pop()            删除并返回数组的最后一个元素
push()            向数组的末尾添加一个或更多元素,并返回新的长度
/*队列方法 结合shift()和push()可以向队列一样使用数组*/
shift()            删除并返回数组的第一个元素
/*队列方法 同时使用unshift()和pop()可以从相反的方法模拟队列*/
unshift()        向数组的开头添加一个或更多元素,并返回新的长度
/*重排列方法*/
sort()            对数组的元素进行排序
reverse()        颠倒数组中元素的顺序
/*操作方法*/
concat()        连接两个或更多的数组,并返回结果
slice()            从某个已有的数组返回特定的元素
splice()        删除元素,并向数组添加新元素
/*下面是ECMPScript 5 中的新方法*/
/*位置方法*/
indexOf()        从数组的开头开始向后查找
lastIndexOf()      从数组的末尾开始向前查找
/*迭代方法*/
every()            对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true    
filter()        对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
forEach()        对数组中的每一项运行给定函数。这个方法没有返回值
map()            对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
some()            对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true
/*归并方法  迭代数组中的每一项,然后构建一个最终返回的值。*/
reduce()        从数组的第一项开始,逐个遍历
reduceRight()    从数组的最后一项开始,向前逐个遍历

Array对象的部分实例程序:
var person1 = {
toLocaleString : function(){
return “Nikolaos”;
},
toString :function(){
return “Nicholas”;
}
};
var person2 = {
toLocaleString:function(){
return “Grigoraios”;
},
toString :function(){
return “Greg”;
}
};

var person = [person1,person2];
console.log(person);
console.log(person.toString());
console.log(person.toLocaleString());
console.log(person.join("||"));
person.push("huang");
console.log(person.length);
var temp  = person.pop();
console.log(temp);
console.log(person.length);
var temp_first = person.shift();
console.log(temp_first);
console.log(person.length);

var value = [1,3,2,6,4];
console.log(value.reverse());

var test = function(item,index,array){
    return (item>2);
};
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(test); //false
console.log(everyResult);
var someResult = numbers.some(test); //true
console.log(someResult);
var filterResult = numbers.filter(test); //[3,4,5,4,3]
console.log(filterResult);
var mapResult = numbers.map(test);//[false,false,true,true,true,true,true,false,false]
console.log(mapResult);
numbers.forEach(function(item,index,array){
    return item ++;
});
console.log(numbers);

var sum = numbers.reduce(function(prev,cur,index,array){
    return prev  + cur;
});
console.log(sum);

var sum2 = numbers.reduce(function(prev,cur,index,array){
    return prev  + cur;
});
console.log(sum2);

Date类型

Date日期对象

日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒)。

定义一个时间对象 :

var Udate=new Date(); 

注意:使用关键字new,Date()的首字母必须大写。

使 Udate 成为日期对象,并且已有初始值:当前时间(当前电脑系统时间)

如果要自定义初始值,可以用以下方法:

var d = new Date(2012, 10, 1);  //2012年10月1日
var d = new Date('Oct 1, 2012'); //2012年10月1日

我们最好使用下面介绍的“方法”来严格定义时间。
parse() UTC() 日期和时间都是基于本地时区而非GMT来创建的。

访问方法语法:“<日期对象>.<方法>”

Date对象中处理时间和日期的常用方法:

方法名称                    功能描述
parse()                    接受表示日期的字符串参数,然后尝试根据这个字符串返回相应的日期毫秒数。
                        不能表示返回NaN
UTC()                    返回表示日期的毫秒数
now()                    ECMAScript 5出现,返回调用这个方法时的日期和时间毫秒数。
加号+                    获取Date对象的时间戳

toLocaleString()        返回与浏览器设置的地区适应的格式的日期和时间
toString()                返回带有时区信息的日期和时间
valueOf()                返回日期的毫秒数

/*日期格式化方法*/
toDateString()            以特定于实现的格式显示星期几、月、日和年
toTimeString()            以特定于时间的格式显示时、分、秒和时区
toLocaleDateString()    以特定于地区的格式显示星期几、月、日和年
toLocaleTimeString()    以特定于时间的格式显示时、分、秒和时区
toUTCString()            以特定实现的格式显示时、分、秒

get/setDate()            返回/设置日期
get/setFullyear()        返回/设置年份,用四位数表示
get/setYear()            返回/设置年份
get/setMouth()            返回/设置月份。0:一月
get/setMinutes()        返回/设置分钟数
get/setSeconds()        返回/设置秒钟数
get/setTime()            返回/设置时间(毫秒为单位)
getDay()                返回星期,0表示星期天

RegExp类型

来支持正则表达式

var expression = /pattern / flags;
pattern            任何简单或复杂的正则表达式
flags            标明正则表达式的行为
                g:全局模式
                i:不区分大小写模式
                m:多行模式

正则表达式中的所有元字符都必须转义,加\

元字符包括:( [ { \ $ | ) ? * + . ] }

构造方法:

  1. 使用字面值

    var pattern1 = /at/g;
    var pattern2 = /[bc]at/i;
    var pattern3 = /.at/gi;
    
  2. 使用RegExp构造函数,传递的参数是字符串,转义的时候,要用\

ECMAScript 5规定使用正则表达式字面值必须像直接调用RegExp构造函数一样,每次都创建新的regExp实例。

RegExp实例属性

global            布尔值,是否设置了g标志
ignoreCase        布尔值,是否设置了i标志
lastIndex        整数,表示开始搜索下一个匹配的字符位置,默认是0
multiline        布尔值,是否设置了m标志
source            正则表达式的字符串表示

RegExp实例方法

exec()            捕获组设计
                参数:要应用模式的字符串
                返回值:    第一个匹配信息的数组,没有匹配返回null。返回数组有两个额外属性:index、input
                index:匹配项在字符串中的位置
                input:应用正则的字符串
                每次只返回一个匹配项
                在多个匹配的情况下,在不设置全局的情况下,多次调用返回的都是第一此匹配的位置
                在设置全局的情况下,多次调用返回的是下一个匹配的位置
test()            在模式与该参数匹配的情况下,返回true;反正返回false。
toLocaleString()
toString()         返回正则表达式的字面量
valueOf()        返回正则表达式本身

RegExp构造函数属性

长属性名            段属性名            说明
input            $_                最近一次要匹配的字符串 Opera未实现此属性
lastMath        $&                最近一次匹配项
lastParen        $+                最近一次匹配的捕获组
leftContext        $`                input字符串中lastMatch之前的文本
multiline        $*                布尔值,表示是否所有表达式都使用多行模式    
rightContext    $'                input字符串中lastMatch之后的文本
$1 $2...$9

Function类型

声明方法:

  1. 函数声明

    function sum(num1,num2){

    return num1 +num2;
    

    }

  2. 函数表达式

    var sum = function(num1,num2){
        return num1 + num2;
    };
    
  3. Function构造函数(不推荐)

    var    sum = new Function("num1","num2","return num1 + num2");
    

函数是对象,函数名是指针

使用不带圆括号的函数名是访问函数指针,而非调用函数

没有重载

函数名本身就是变量,所以可以作为值来使用

不仅可以像传递参数一样传递把一个函数传递给另一个函数,可以将函数作为另一个函数的返回结果。

作为值的函数

函数内部属性

arguments

主要保存函数参数,是一个类数组对象,包含着传入函数中的所有参数。

有一个callee属性,该属性是一个指针,指向拥有这个arguments对象的函数。

function factorial(num){
    if(num<=1){
        return 1;
    }else{
        return num * arguments.callee(num-1);
    }
}

this

this引用的是函数据以执行的环境对象。
函数的名字仅仅是一个包含指针的变量而已。即使是在不同的环境中执行,全局的sayColor()函数与o.sayColor指向的仍然是同一个函数。

caller

ECMAScript 5中加入
保存着调用当前函数的函数引用

function outer(){    
    inner();
}
function inner(){
    console.log(arguments.callee.caller);
}    

严格模式下

  • arguments.callee会导致错误
  • arguments。caller也会导致错误,非严格模式下,始终中undefined
  • 不能为函数caller属性赋值。

    函数属性和方法

    属性 说明
    length 表示函数希望接受的命名参数的个数
    prototype 保存它们所有实例方法的真正所在 ECMASCript 5中prototype属性不可枚举

    非继承方法 说明
    apply(),call() 在特定的作用域中调用函数,等同于设置函数体内的this对象的值。扩充函数赖以运行的作用域,

    对象和方法不需要有任何耦合关系    
    

    bind 创建一个函数的实例,其this值会被绑定到传递给bind()函数的值。
    toLocaleString()
    toString() 返回函数的代码
    valueOf 返回函数代码

基本的包装类型

每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象。

引用对象和基本包装类型的主要区别:对象的声明周期

  1. 使用new操作符穿件的引用类型的实例,在执行流离开当前作用域之前都一直保持在内存中。
  2. 而自动创建的基本包装类的对象,则只存于一个代码的执行瞬间,然后立即被销毁。
  3. 不能再运行时为基本类型值添加属性和方法。

Object构造函数也会像工厂方法一样,根据传入的值的类型返回相应的基本包装类型的实例

注意:使用new调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的

Boolean

基本类型的布尔值和Boolean对象之间的区别:

  1. typeof 对基本类型返回 “boolean”
    对引用类型 返回 "object"
    
  2. Boolean对象时Boolean类型的实例
    instanceof 测试Boolean对象 返回 true;

建议永远不要使用Boolean对象

Number

toFixed()         会按照指定的小数位返回数值的字符串表示
toExponential()    返回以指数表示法表示的数值的字符串形式
toPrecision()    返回固定戴奥格式,也可能返回指数格式,具体规则看哪种更合适

String

/*字符方法*/
charAt()        用于访问字符串中特定位置的方法 得到的是字符本身
charCodeAt()      用于访问字符串中特定位置的方法 得到的是字符编码
[index]            用于访问字符串中特定位置的方法
/*字符串方法*/
concat()        用于将一或多个字符串拼接起来,返回拼接得到的新字符串。
/*基于字符串创建新字符串的方法*/
slice()
substr()
subString()
/*字符串查找方法*/
indexOf()        从字符串开头向后搜索子字符串
lastIndexOf()    从字符串结尾向前搜索子字符串
/*ECMAScript 5*/
trim()            创建一个字符串副本,删除前置机后缀的所有空格,然后返回结果
/*字符串大小转换方法*/
toLowerCase()
toLocaleLowerCase()     针对特定地区实现
toUpperCase()
toLocaleUpperCase()    
/*字符串的模式匹配方法*/
match()            
search()            返回字符串中国第一次匹配的索引,如果没有返回-1.始终从开头向后查找
replace()
/*比较两个字符串*/    
localeCompare()    
/*构造函数*/
fromCharCode()方法    接受一或多个字符编码,然后将它们转换成一个字符串。
/*还有一些HTML方法,因为它们创建的标记通常无法表达语义,所以尽量不使用*/

单体内置对象

有ECMAScript实现提供的、不依赖与宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。

开发人员不必显示的实例化内置对象,因为它们已经实例化了。

例如:Object、Array、String,还有Global、Math。

Global对象

方法

/*可以对URI进行编码,以便发送给浏览器。用特殊的UTF-8替换所有无效的字符。*/
encodeURI()                    用于整个URI,不会对本身属于URI的特殊字符进行编码,如冒号,正斜杠、问号和井号
encodeURIComponent()        用于URI的某一段进行编码。会对它发现的任何非标准字符进行编码
有效的URI不能包含空格
可以对整个URI使用encodeURI(),只能对附加URI后面的字符使用encodeURIComponent()

decodeURI()
decodeURIComponent()

方法eval()

就像一个完整的ECMAScript解析器

属性

属性                说明
undefined        特殊值undefined
NaN                特殊值NaN    
Infinity        特殊值Infinity
Object            构造函数Object
Array            构造函数Array    
Function        构造函数Boolean    
String            构造函数String    
Number            构造函数Number    
Date            构造函数Date
RegExp            构造函数RegExp
Error            构造函数Error
EvalError        构造函数EvalError
RangeError        构造函数RangeError
ReferenceError    构造函数ReferenceError
SyntaxError        构造函数SyntaxError
TypeError        构造函数TypeError
URIError        构造函数URIError

window对象

ECMAScript虽然没有指出如何直接访问Global对象,但Web浏览器都是将这个全局对象作为window对象的一部分加以实现。

var gloabl = function(){
    return this;
}();
立即执行函数表达式,返回this的值。

Math 对象

Math对象,提供对数据的数学计算。

使用 Math 的属性和方法,代码如下:

<script type="text/javascript">
  var mypi=Math.PI; 
  var myabs=Math.abs(-15);
  document.write(mypi);
  document.write(myabs);
</script>

注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别。

Math对象属性

属性                说明
E                返回算术常量e,即自然对数的底数(约等于2.718)
LN2                返回2的自然对数(约等于0.693)
LN10            返回10的自然对数
LOG2E            返回以2为底E的对数(约等于1.442)
LOG2E            返回以10为底的e的对数(约登月0.434)
PI                返回圆周率(约等于3.1415926)
SQRT1_2            返回2的平方根的倒数(约等于0.707)
SQRT2            返回2的平方根(约等于1.414)

Math对象方法

方法                描述

cos(x)            返回余弦值
acos(x)            返回数的反余弦值
sin(x)            返回数的正炫值
asin(x)            返回数的反正炫值
tan(x)            返回数的正切值
atan(x)            返回数字的反正切值
atan2(y,x)        返回由x轴点(x,y)的角度(以弧度为单位)

ceil(x)            对数进行上舍入
floor(x)        对数进行下舍入
round(x)        把数四舍五入为最接近的整数

exp(x)            返回e的指数
log(x)          返回数的自然对数(底为e)

max(x,y)        返回x和y中的最高值
min(x,y)        返回x和y中的最低值
abs(x)            返回数的绝对值
sqrt(x)            返回数的平方根
pow(x,y)        返回x的y次幂
random()        返回0~1之间的随机数

toSource()        返回给对象的源代码
valueOf()        返回Math对象的原始值        
文章目录
  1. 1. Object 类型
    1. 1.1. 对象字面量
    2. 1.2. 对象访问
  2. 2. Array类型
    1. 2.1. 检测数组
  3. 3. Date类型
    1. 3.1. Date日期对象
  4. 4. RegExp类型
    1. 4.1. RegExp实例属性
    2. 4.2. RegExp实例方法
    3. 4.3. RegExp构造函数属性
  5. 5. Function类型
    1. 5.1. 作为值的函数
    2. 5.2. 函数内部属性
      1. 5.2.1. arguments
      2. 5.2.2. this
      3. 5.2.3. caller
    3. 5.3. 函数属性和方法
  6. 6. 基本的包装类型
    1. 6.1. Boolean
    2. 6.2. Number
    3. 6.3. String
  7. 7. 单体内置对象
    1. 7.1. Global对象
      1. 7.1.1. 方法
      2. 7.1.2. 方法eval()
      3. 7.1.3. 属性
    2. 7.2. window对象
    3. 7.3. Math 对象
,