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

时间:2022-09-12 13:08:34

四、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.函数的重复声明会覆盖,变量的重复声明会忽略。

 function addSomeNumber(num){
return num + 100;
}
function addSomeNumber(num) {
return num + 200;
}

以上代码相当于下面的代码,如果把函数签名看做函数指针的话,相当于函数指针从第一个函数指向了第二个函数,所以函数的重复声明,先声明的会被后声明的覆盖。

 var addSomeNumber = function (num){
return num + 100;
};
addSomeNumber = function (num) {
return num + 200;
};

3.函数声明与函数表达式并不是相同的地位,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。
4.因为 ECMAScript 中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。
5.函数内部属性:在函数内部,有两个特殊的对象: arguments 和 this。

  • arguments对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。
  • this对象,引用的是函数据以执行的环境对象(不是声明时的环境对象)
  • 函数的属性:caller(函数调用)这个属性中保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为 null。

6.函数的属性与方法:

  • 属性:每个函数都包含两个属性: length 和 prototype
    • length 属性表示函数希望接收的命名参数的个数
    • prototype 属性
  • 方法:每个函数都包含两个非继承而来的方法: apply()和 call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的值。

    • apply()函数
      • 方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是 Array 的实例,也可以是arguments 对象。
    • call()函数
      • 在使用call()方法时,传递给函数的参数必须逐个列举出来。
    • 事实上,传递参数并非 apply()和 call()真正的用武之地;它们真正强大的地方是能够扩充函数赖以运行的作用域。使用 call()(或 apply())来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。例如:
    •  window.color = "red";
      var o = { color: "blue" };
      function sayColor(){
      alert(this.color);
      }
      sayColor(); //red
      sayColor.call(this); //red
      sayColor.call(window); //red
      sayColor.call(o); //blue
    • bind()函数:这个方法会创建一个函数的实例,其 this 值会被绑定到传给 bind()函数的值。例如:
    •  window.color = "red";
      var o = { color: "blue" };
      function sayColor(){
      alert(this.color);
      }
      var objectSayColor = sayColor.bind(o);
      objectSayColor(); //blue
    • 每个函数继承的 toLocaleString()和 toString()方法始终都返回函数的代码。

五、基本包装类型:3 个特殊的引用类型: Boolean、 Number 和String

实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。引用类型与基本包装类型的主要区别就是对象的生存期。使用 new 操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一
行代码的执行瞬间,然后立即被销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。

1.Boolean类型:

Boolean 类型的实例重写了 valueOf()方法,返回基本类型值 true 或 false;重写了 toString()方法,返回字符串"true"和"false"。

基本类型与引用类型的布尔值还有两个区别。首先, typeof 操作符对基本类型返回"boolean",而对引用类型返回"object"。其次,由于 Boolean 对象是 Boolean 类型的实例,所以使用 instanceof操作符测试 Boolean 对象会返回 true,而测试基本类型的布尔值则返回 false。

2.Number类型:

Number 类型也重写了 valueOf()、 toLocaleString()和 toString()方法。重写后的 valueOf()方法返回对象表示的基本类型的数值,另外两个方法则返回字符串形式的数值。

将数值格式化为字符串的方法:

  • toFixed():按照指定的小数位返回数值的字符串表示
  • toExponential():该方法返回以指数表示法(也称 e 表示法)表示的数值的字符串形式。

3.String类型对象:

创建包装类型:采用String构造函数来实现,var stringObject = new String("hello world");

String 类型的每个实例都有一个 length 属性,表示字符串中包含多个字符。即使字符串中包含双字节字符(比如空格),每个字符也仍然算一个字符。

方法:

  • 用于访问字符串中特定字符的方法是: charAt()和 charCodeAt()。这两个方法都接收一个参数,即基于 0 的字符位置。其中, charAt()方法以单字符字符串的形式返回给定位置的那个字符,charCodeAt()返回的是该位置的字符编码。例如:
  •  var stringValue = "hello world";
    alert(stringValue.charAt(1)); //"e"
    alert(stringValue.charCodeAt(1)); //输出"101"
  • concat()--拼接:用于将一或多个字符串拼接起来,返回拼接得到的新字符串。不影响原字符串。例如:
     var stringValue = "hello ";
    var result = stringValue.concat("world");
    alert(result); //"hello world"
    alert(stringValue); //"hello"
  • slice()、 substr()和 substring()--截取:这三个方法都会返回被操作字符串的一个子字符串,而且也都接受一或两个参数。第一个参数指定子字符串的开始位置,slice()和
    substring()的第二个参数指定的是子字符串最后一个字符后面的位置。而 substr()的第二个参数指定的则是返回的字符个数。在传递给这些方法的参数是负值的情况下,它们的行为就不尽相同了。其中, slice()方法会将传入的负值与字符串的长度相加, substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为 0。最后, substring()方法会把所有负值参数都转换为 0。不影响原字符串。
  •  var stringValue = "hello world";
    alert(stringValue.slice(3)); //"lo world"
    alert(stringValue.substring(3)); //"lo world"
    alert(stringValue.substr(3)); //"lo world"
    alert(stringValue.slice(3, 7)); //"lo w"
    alert(stringValue.substring(3,7)); //"lo w"
    alert(stringValue.substr(3, 7)); //"lo worl"
    alert(stringValue.slice(-3)); //"rld"
    alert(stringValue.substring(-3)); //"hello world"
    alert(stringValue.substr(-3)); //"rld"
    alert(stringValue.slice(3, -4)); //"lo w"
    alert(stringValue.substring(3, -4)); //"hel"
    alert(stringValue.substr(3, -4)); //""(空字符串)
  • indexOf()和 lastIndexOf():与数组的方法相似
  • trim():创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果。不影响原来的字符串。
  • 大小写转换的方法有 4 个: toLowerCase()、toLocaleLowerCase()、 toUpperCase()和 toLocaleUpperCase(),toLocaleLowerCase()和 toLocaleUpperCase()方法则是针对特定地区的实现。
  • match():在字符串上调用这个方法,本质上与调用 RegExp 的 exec()方法相同。match()方法只接受一个参数,要么是一个正则表达式,要么是一个 RegExp 对象。
  • search():接受一个参数,要么是一个正则表达式,要么是一个 RegExp 对象。返回字符串中第一个匹配项的索引;如果没有找到匹配项,则返回-1。而且, search()方法始终是从字符串开头向后查找模式。
  • replace():替换接受两个参数:第一个参数可以是一个 RegExp 对象或者一个字符串(这个字符串不会被转换成正则表达式),第二个参
    数可以是一个字符串或者一个函数。如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有子字符串,唯一的办法就是提供一个正则表达式,而且要指定全局(g)标志。例如:
  •  var text = "cat, bat, sat, fat";
    var result = text.replace("at", "ond");
    alert(result); //"cond, bat, sat, fat"
    result = text.replace(/at/g, "ond");
    alert(result); //"cond, bond, sond, fond"
  • split():基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中。分隔符可以是字符串,也可以是一个 RegExp 对象(这个方
    法不会将字符串看成正则表达式)。 可以接受可选的第二个参数,用于指定数组的大小。
  • localeCompare()
  • fromCharCode():接收一或多个字符编码,然后将它们转换成一个字符串。

七、单体内置对象:

1.Global对象:

encodeURI()和 encodeURIComponent()方法可以对 URI(Uniform ResourceIdentifiers,通用资源标识符)进行编码,以便发送给浏览器。有效的 URI 中不能包含某些字符,例如空格。而这两个 URI 编码方法就可以对 URI 进行编码,它们用特殊的 UTF-8 编码替换所有无效的字符,从而让浏览器能够接受和理解。

其中, encodeURI()主要用于整个 URI(例如, http://www.wrox.com/illegal value.htm),而 encodeURIComponent()主要用于对 URI 中的某一段(例如前面 URI 中的 illegal value.htm)进行编码。

它们的主要区别在于, encodeURI()不会对本身属于 URI 的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;而 encodeURIComponent()则会对它发现的任何非标准字符进行编码。

eval():eval()方法就像是一个完整的 ECMAScript 解析器,它只接受一个参数,即要执行的 ECMAScript (或 JavaScript)字符串。不建议使用,因为会是的静态作用域混乱。

window对象

Math对象:

min()和 max()方法用于确定一组数值中的最小值和最大值。

Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数

Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数

Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数

Math.random()方法返回大于等于 0 小于 1 的一个随机数

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

  1. JavaScript高级程序设计学习笔记第五章--引用类型

    一.object类型 1.创建object类型的两种方式: 第一种,使用构造函数 var person = new Object();或者是var person={};/与new Object()等价 ...

  2. JavaScript高级程序设计学习笔记第三章--基本概念

    一.标识符: 1.区分大小写 2.命名规则: 第一个字符必须是一个字母.下划线(_)或一个美元符号($) 其他字符可以是字母.下划线.美元符号或数字 标识符中的字母也可以包含扩展的 ASCII 或 U ...

  3. JavaScript高级程序设计学习笔记第十三章--事件

    事件冒泡: IE 的事件流,事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).例如: <!DOCTYPE html> <htm ...

  4. JavaScript高级程序设计学习笔记第六章--面向对象程序设计

    1.ECMAScript没有类的概念,ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”,有点类似于散列表 2.ECMAScript 中有两种属性:数据属性和访问 ...

  5. JavaScript高级程序设计学习笔记第四章--变量、作用域和内存问题

    1.变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 2.变量复制 如果从一个变量向另一个变量复制基本类型的值,会在 ...

  6. JavaScript高级程序设计---学习笔记(五)

    1.2D上下文 1)填充与描边 填充和描边的两个操作取决于两个属性:fillStyle和strokeStyle.两个属性的值可以是字符串.渐变对象或模式对象,默认值都是#000000 例: html: ...

  7. JavaScript高级程序设计学习笔记第十一章--DOM扩展

    1.对 DOM 的两个主要的扩展是 Selectors API(选择符 API)和 HTML5 2.Selectors API Level 1 的核心是两个方法: querySelector()和 q ...

  8. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  9. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

随机推荐

  1. MFC 如何创建浏览文件夹的对话框

    如何创建浏览文件夹的对话框 如何创建浏览文件夹的对话框 CString CXXXXDlg::GetOpenfolderPath() { BROWSEINFO bi; ZeroMemory(&b ...

  2. java-多态性

    1 多态性 主要表现在上转型对象 2 强制类型转换 2.1 基本类型的强制类型转换 转换只能在数值间进行.包括整数型.字符型.浮点型.数值类型和布尔类型间不能转换. 2.2 引用类型变量转换成其子类型 ...

  3. 浅谈数据库技术,磁盘冗余阵列,IP分配&comma;ECC内存,ADO&comma;DAO,JDBC

    整理-----数据库技术,磁盘冗余阵列,IP分配, ECC内存,ADO, DAO,JDBC 1.MySQL MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发.发布和支持.My ...

  4. &lbrack;Cocos2d-x&rsqb;布局与定位

    游戏中,精灵的位置由Position与AnchorPoint同时决定. Scene 锚点 (0,0) 不启用锚点 CCNode锚点 (0,0) 不启用锚点  CCLayer锚点 (0,0) 不启用锚点 ...

  5. Python统计日志中每个IP出现次数

    介绍了Python统计日志中每个IP出现次数的方法,实例分析了Python基于正则表达式解析日志文件的相关技巧,需要的朋友可以参考下 本脚本可用于多种日志类型 #-*- coding:utf-8 -* ...

  6. 关于Weex你需要知道的一切

    QCon第一天,GMTC全球移动技术大会联席主席.手淘技术老大庄卓然(花名南天)在Keynote上宣布跨平台开发框架Weex开始内测,并将于6月份开源,同时他们也放出官网:http://alibaba ...

  7. GitHub Desktop 代码库管理工具

    1.GitHub Desktop 简介 GitHub Desktop 是用于 GitHub 项目版本控制软件. 官网下载地址 GitHub Desktop 其它下载地址 GitHub Desktop ...

  8. tomcat在eclipse创建过程分析

    在本地eclipse上创建一个tomcat server 即tomcat服务器时, 会复制一份tomca安装目录中的conf文件下的配置文件到这个tomcat server目录下 这个tomcat s ...

  9. The number of object passed must be even but was &lbrack;1&rsqb;

    1.失败,使用TransportClient public static void bulkInsert(TransportClient client) throws IOException { Li ...

  10. uva10537 dijkstra &plus; 逆推

    21:49:45 2015-03-09 传送 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8& ...