引用类型

来源:互联网 发布:2015年度网络热词 编辑:程序博客网 时间:2024/04/27 23:21
  • 引用类型的值,即对象,是引用类型的一个实例。
    ○ new + 构造函数 -> 创建新对象

        var  变量名  =  new  引用类型名();    变量名.属性0名 = .......;    变量名.属性1名 = .......;

    ○使用“对象字面量” (属性名可以使用字符串)

        var 变量名 = {        属性0名 :....,        属性1名 :....,        属性2名 :....    };
  • 在ECMAScript中,引用类型是一种数据结构,将数据和功能组织在一起,也被称为对象定义。不具备传统的面向对象语言所支持的类和接口等基本结构。
  • 访问对象属性的两种方法:
    ○点表示法: 对象名.属性名
    ○方括号表示法: 对象名[“属性名”/变量名(被赋值属性名)]
    【方括号表示法的属性名要用字符串形式,可以包含非字母非数字 】
    除非要用变量来访问属性,一般使用点表示法。

【引用类型】

1. Object

2. Array

3. Date

4. RegExp

5. Function

6. 基本包装类型

- Boolean

- Number

- String

7. 单体内置对象

- Global

- Math


【Object】

Object是 一个基础类型,其他类型都从Object继承了基本行为。


【Array】

在另一篇博文中


【Date】

创建方法

var time = new Date(参数);参数可为:    1.Date.parse("月份名 日数,年数") 或者 Date.parse("月份名/日数/年数")    2.Date.UTC(年数,月份数-1,日数,时数,分数,秒数)【参数如果不填,默认获取当前日期和时间。】
var time1 = new Date();console.log(time1.toLocaleString()); //2017-5-23 10:54:57var time2 = new Date(Date.parse("May 23,2017"));或者var time2 = new Date(Date.parse("5/23/2017"));console.log(time2.toLocaleString());//2017-5-23 00:00:00var time3 = new Date(Date.UTC(2017,4,23,10,23,21));console.log(time3.toUTCString());//Tue, 23 May 2017 10:23:21 GMT//获取不同的时间格式的几种方法var time4 = new Date();console.log(time4.toDateString());  //Tue May 23 2017console.log(time4.toTimeString()); //11:00:30 GMT+0800 (中国标准时间)console.log(time4.toLocaleTimeString()); //11:00:30console.log(time4.toUTCString()); //Tue, 23 May 2017 03:00:30 GMT

Date()也常用来计算时间差

var start = Date.now(); //获得当前的毫秒数var end = Date.now(); //获得当前的毫秒数var time = end - start; //求时间差  

【RegExp】

创建方法

1.使用构造函数:var reg =  new RegExp("正则表达式","标志"); (需要双重转义)2.使用字面量:var reg =/正则表达式/标志;*标志:表明正则表达式的行为    g:全局模式(global),应用所有的字符串,而不是发现第一个匹配项就停止    i:忽略大小写(ignoreCase)    m:多行模式(multiline),在一行末尾时会继续查找下一行*需要用'\'转义的元字符:    ()[]{}\^$|?*+.
var text = "car or bAr or far OR Cat?";var pattern1 = /.ar/gi; 或者 var pattern1 = new RegExp("\.ar","gi"); //匹配一ar结尾的字符长度为3的字符串while( (result = pattern1.exec(text) ) != null){    console.log(result);}//[ 'car', index: 0, input: 'car or bAr or far OR Cat?' ]//[ 'bAr', index: 7, input: 'car or bAr or far OR Cat?' ]//[ 'far', index: 14, input: 'car or bAr or far OR Cat?' ]

实例方法

reg.exec(“待匹配的字符串”)   //返回一个数组,包含匹配的字符串、与捕获组匹配的字符串、匹配项在字符串中的位置index、待匹配的字符串input。reg.test(“待匹配的字符串”)  //返回true(匹配)或false(不匹配)

构造函数的属性

RegExp.input 或 RegExp.$_ 最近一次待匹配的字符串RegExp.lastMatch 或 RegExp["$&"] 最近一次的匹配项RegExp.lastParen 或 RegExp["$+"] 最近一次匹配的捕获项RegExp.leftContent 或 RegExp["$`"] 最近一次匹配项左边的字符串RegExp.rightContent 或 RegExp["$'"] 最近一次匹配项右边的字符串RegExp.multline 或 RegExp["$*"] 是否所有表达式都使用多行模式RegExp.$1  ~ RegExp.$9  第1个捕获组~第9个捕获组

【Function】

*每个函数都是Function的实例,所以函数也是对象,也拥有方法。函数名实际上是一个指向函数对象的指针,不会与某个函数绑定,一个函数可能会有多个函数名,因为可以有多个指针指向同一对象。

*不带()的函数名是访问函数指针,带()的函数名是调用函数。

方法的定义

1.使用函数声明语法: function 函数名(参数){…….}2.使用函数表达式: var 函数名 = function(参数){……];3.使用构造函数: var 函数名 = new Function(“参数”,“函数体”);  // Function构造函数可以接收任意数量的参数,最后一个参数始终视为函数体。不推荐,因为该语法会导致解析两次代码,影响性能。

*【解析器对函数声明和函数表达式的读取顺序不同。解析器会在代码执行之前通过“函数声明提升过程”,读取并将函数声明添加到执行环境中。在对代码求值时,JavaScript引擎在第一遍会声明函数并将其放在源代码树的顶部。而函数表达式必须等到解析器执行到它所在的代码行才会被解释执行。】

内部两个特殊对象:

  • arguments (类数组对象,包含传入函数中的所有参数)
    • arguments .callee //指向该arguments对象的函数,可以解除函数体内的代码与函数名的耦合状态。
    • arguments .callee.caller //保存 调用当前函数的 函数的引用,如果在全局环境下调用,返回null
    • arguments .caller //始终返回undefined
function factorial(num){    if(num <= 1){        return 1;    }    else{        return num*factorial(num-1);         或者        return num*arguments.callee(num-1);//better,因为可以接触代码与函数名之间的耦合性    }}console.log(factorial(5)); //120
function outer(){    inner();}function inner(){    console.log(arguments.callee.caller); //输出调用inner()的函数}outer(); //[Function: outer]
  • this
    this引用的是函数执行的环境对象

函数属性

  1. 函数名.length //返回函数希望接收的参数个数
  2. 函数名.prototype

函数方法

1.函数名.apply(运行函数的作用域,参数数组(可以是Array的实例/arguments对象)) //在特定的作用域中调用函数,即设置函数体内this对象的值。

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

2.函数名.call(运行函数的作用域,参数1,参数2……) //在特定的作用域中调用函数,即设置函数体内this对象的值。

function sum(num1,num2){    return num1+num2;}function callSum(num1,num2){    return sum.call(this,num1,num2); //每个参数要逐个列举出来}console.log(callSum(10,10)); //20-----------------------------------------------------window.color = "red";var o = {color: "blue"};function showColor(){    console.log(this.color);}showColor(); //redshowColor.call(this); //redshowColor.call(window); //redshowColor.call(o); //blue

3.var 新函数名 = 函数名.bind(对象); //创建一个该函数的实例,且该实例的this值为对象。
新函数名();

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

【基本包装类型】

在另一篇博文中


【单体内置对象】

内置对象:由ECMAScript实现提供的、不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。有Object、Array、String、Global、Math

【Global】

所有在全局作用域中定义的属性和函数,最终都是Global的属性。

URI编码方法

  • encodeURI() 用 %20 替换URI的空格,主要用于整个URI
  • encodeURIComponent() 替换所有非字母数字字符,由于会将URI本身的特殊符号://都替换掉,所以该方法主要用于URI的某一段

URI解码方法

  • decodeURI()
  • decodeURIComponent()

eval(“要执行的Js代码xx”)

要执行的代码的作用域链==执行该行代码的作用域链,所以在eval作用域中可以引用xx中的变量

【Math】

属性

Math.E 常量e Math.LN10 10的自然对数 Math.LN2 2的自然对数 Math.LOG2E 以2为底e的对数 Math.LOG10E 以10为底e的对数 Math.PI π Math.SQRT1_2 根号2的倒数 Math.SQRT2 根号2

方法

  1. 求最大最小:
    • Math.min(一系列数字) or Math.min.apply(Math,数组)
    • Math.max(一系列数字) or Math.man.apply(Math,数组)
  2. 舍入方法
    • Math.ceil() 入
    • Math.floor() 舍
    • Math.round() 四舍五入
console.log(Math.ceil(2.1)); //3console.log(Math.floor(2.8));//2console.log(Math.round(2.5));//3
  1. 产生随机数方法:

    Math.random();  //返回一个【0,1)的数随机数 = Math.floor(random()*可能值的总数 + 第一个可能的值 )
  2. 公式方法:

    • Math.abs(数字); //返回数字的绝对值
    • Math.exp(n); //返回e的n次幂
    • Math.pow(数字,n); //返回数字的n次幂
    • Math.log(m); //返回m的自然对数
    • Math.sqrt(数字); //返回数字的开根
    • Math.acos(数字); //返回数字的反余弦值
    • Math.asin(数字); //返回数字的反正弦值
    • Math.atan(数字); //返回数字的反正切值
    • Math.atan2(y,x); //返回y/x的反正切值
    • Math.cos(数字); //返回数字的余弦值
    • Math.sin(数字); //返回数字的正弦值
    • Math.tan(数字); //返回数字的正切值
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 浦发信用卡输错密码被锁定怎么办 浦发手机银行查询密码锁定怎么办 宝宝吃母乳没吃饱就睡着了怎么办 量柱画线不是方屏电脑怎么办 夏天卧室开空调太干了怎么办 健身房锻炼手臂抻的肌肉疼怎么办 人累了可以休息 心累了怎么办 上来两天班感觉不想做了怎么办 休产假的时候公司解散了怎么办 上三天班老板不给结工资怎么办 老师说孩子上课纪律不好我该怎么办 大班的孩子记不住拼音怎么办呢 家长跟孩子沟通出现问题该怎么办? 如果孩子入学分配出现问题该怎么办 2岁多的宝宝喜欢动手打人怎么办 儿童新长出的大门牙像两边撇怎么办 被烫伤了怎么办的活动反思怎么写 生完孩子脸上起蝴蝶斑了怎么办 鼻子部位突然长了晒斑怎么办 我脸上长有日晒斑.该怎么办 做为小领导同事不听你的怎么办 二年级的小孩叫写作业不听怎么办 苹果手机微信出现黑框怎么办 百度网盘下载原画视频会闪退怎么办 已发布的公众号推文段落重复怎么办 谷歌商店找不到方舟手游怎么办 染头发的颜色弄到衣服上怎么办 橡皮把桌面油漆弄掉了怎么办 手机被调成静音不知道放哪了怎么办 金丝熊吃大米吃撑了怎么办 部落有可疑记录被暂时禁封怎么办 鼻子通向嘴那里痒得难受怎么办 小孩上嘴唇中间的连线碰掉了怎么办 秋田犬夏天退毛严重么 怎么办 初中数学基本没学过高中怎么办 老师家纺突然想日语文老师怎么办 微信聊天表情小企鹅不动了怎么办 微信自带小表情不全怎么办 爱奇艺电视果有图像无声音怎么办 微信表情包保存不到手机相册怎么办 才出生的兔宝宝被母兔抓伤了怎么办