四、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. JavaWeb学习总结第二篇--第一个JavaWeb程序

    JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下 ...

  2. Linux系统调用及用户编程接口(API)

    系统调用 所谓系统调用是指操作系统提供给用户程序调用的一组"特殊"接口,用户程序能够通过这组"特殊"接口来获得操作系统内核提供的服务.比如用户能够通过进程控制相 ...

  3. EasyNVR流媒体服务器接入EasyDSS云视频平台快照上传实现

    EasyNVR拥有接入EasyDSS云平台的功能 接入EasyDSS云平台会定时向云平台上传快照数据,这个快照数据用于云平台向客户端提供快照展示 遇到的问题 由于快照上传的间隔提供认为修改的功能,则我 ...

  4. 高性能流媒体服务器EasyDSS前端重构(三)- webpack + vue + AdminLTE 多页面引入 element-ui

    接上篇 接上篇<高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间> 本文围绕着实现EasyDSS高性能流 ...

  5. HTML5画布(基础篇11-10)

    <script type="text/javascript"> $(function(){ var s = $("#myCanvas")[0]; v ...

  6. Swift 学习笔记 (继承)

    一个类可以从另一个类继承方法.属性和其他的特性.当一个类从另一个类继承的时候,继承的类就是所谓的子类,而这个类继承的类被称为父类. 在 Swift 中类可以调用和访问属于它们父类的方法.属性和下标脚本 ...

  7. 剑指Offer:数组中出现次数超过一半的数字【39】

    剑指Offer:数组中出现次数超过一半的数字[39] 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于这 ...

  8. iOS中常见的设计模式(MVC/单例/委托/观察者)

    关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...

  9. Appium移动自动化配置-ios&安卓

    官网安装参考:https://www.npmjs.com/package/appium Appium安装 1.安装nodejs 2.安装appium iOS侧环境安装 1.安装xcode 2.安装Xc ...

  10. 3D文字特效

    在线演示 本地下载