乐趣区

关于javascript:JavaScript面向对象的程序设计

1. 内置对象及内置函数

1.1 根本包装类型

(1) 在 ES 中,数据的分类分为根本数据类型和援用类型。(2) 而根本包装类型,严格来说不属于下面两个中的任意一个,然而又和这两种类型非亲非故。(3) 根本数据类型和援用类型这两个类型其中一个很显著的区别是,援用类型有本人内置的办法,也能够自定义其余办法用来操作数据。而根本数据类型不能像援用类型那用有本人的内置办法对数据进行更多的操作。(4)ECMAScript 提供了 3 个非凡援用类型 (根本包装类型):Boolean,Number,String。(5) 根本包装类型,和其余援用类型一样,领有内置的办法能够对数据进行额定操作。(6) 每当读取一个根本类型值的时候, 后盾就会创立一个对应的根本包装类型对象,从而能够调用一些办法操作这些数据。例如:var str = 'test';
    var str2 = str.substring(2);
    console.log(str2);
    下面 str 变量存储的值是一字符串,'test' 字符串是根本数据类型 String 类型的值,而后它调用了 substring 办法,并将后果保留在了 str2 中。为什么它不是对象却能调用对象的办法呢?在执行第二行代码时,JS 会主动进行上面的步骤:1. 主动创立 String 类型的一个实例(和根本类型的值不同,这个实例就是一个根本包装类型的对象)2. 调用实例(对象)上指定的办法
        3. 销毁这个实例
        // 用 String 构造函数创立一个实例,这个实例时一个对象
        var str = new String('test');
        // 对象中有内置办法供开发人员应用
        var str2 = str.substring();
        // 销毁这个实例
        str = null;
    通过下面的加工后,根本字符串变的跟对象一样,下面这三个步骤也实用于 Boolean、Number 类型。

1.1.1 JS 什么时候会主动创立一个对应的根本包装类型对象呢?

 取决于以后执行的代码是否是为了获取他的值
每当读取一个根本类型的值,也就是当咱们须要从内存中获取到它的值时(这个拜访过程称为读取模式)这时,后盾就会主动创立一个根本包装类型的对象。var str = 'hhh';
console.log(str);// 读取模式,后盾主动创立根本包装类型对象
var str2 = str; // 赋值给变量 str2, 也须要读取 str 的值,同上 

1.1.2 援用类型和根本包装类型有什么不同呢?最次要的区别就是对象的生存期。

(1) 援用类型:应用 new 操作符创立的援用类型实例,在执行流来到以后作用域之前始终都保留在内存中。(2) 根本包装类型:只存在一行代码的执行霎时,而后立刻销毁。var str = 'test';
    str.test = 'hhh';
    console.log(str.test);//undefined
下面第二行代码给主动创立的 String 实例对象增加了 test 属性,尽管此刻代码执行时他是失效的,然而在这行代码执行结束后该 String 实例就会立即被销毁,String 实例的 test 属性也就不存在了
当执行第三行代码时,因为是读取模式,又从新创立了新的 String 实例,而这个新创建的 String 实例没有 test 属性,后果也就是 undefined.

1.1.3 怎么能力给根本类型增加办法或者属性呢?

(1) 减少对应的包装对象的原型办法
    // 给字符串增加属性或办法 要写到对应的包装对象的原型下才行
    var str = 'hello';
    String.prototype.last = function(){
        // 返回指定地位的字符
        return this.charAt(this.length - 1);    
    }
    console.log(str.last());// 执行到这一句,JS 会偷偷做一些事件,相当于
    //1. 找到根本包装对象,new 一个和字符串值雷同的对象
    var str = new String('hello');
    //2. 通过这个对象找到了包装对象下的办法并调用
    str.last();
    //3. 这个对象被销毁
    str = null;
(2) 应用 new 运算符创立 String 对象
     //new 运算符
    var str = new String('hello');
    // 无效属性
    str.name = 'HI';
    // 无效办法
    str.age = function(){return 100;}
    留神:在应用 new 运算符创立 String,Number,Boolean 三种类型的对象时,能够给本人增加属性或者办法;或减少对应的包装对象的原型办法;但咱们倡议不要这样应用,因为这样会导致基本分不清到底是根本类型还是援用类型。

1.1.4 Boolean 类型

Boolean 类型没有特定的属性或者办法。个别间接将 Boolean 当作一个工具办法来应用 

1.1.5 Number 类型

(1) 内置属性(动态属性,间接调用即可)
属性 形容
MAX_VALUE 可示意的最大的数。
MIN_VALUE 可示意的最小的数。
NaN 非数字值。
NEGATIVE_INFINITY 负无穷大,溢出时返回该值。
POSITIVE_INFINITY 正无穷大,溢出时返回该值。
prototype 使您有能力向对象增加属性和办法。
(2) 内置办法(对象办法)
办法 形容
toString 把数字转换为字符串,应用指定的基数。
toLocaleString 把数字转换为字符串,应用本地数字格局程序。
toFixed 把数字转换为字符串,后果的小数点后有指定位数的数字。
toExponential 把对象的值转换为指数计数法。
toPrecision 办法可在对象的值超出指定位数时将其转换为指数计数法。
valueOf 返回一个 Number 对象的根本数字值。

1.1.6 String 类型

(1) 对象属性
属性 形容
constructor 对创立该对象的函数的援用
length 字符串的长度
prototype 容许您向对象增加属性和办法

String 也蕴含对象的通用办法,比方 valueOf()、toLocaleString() 和 toString() 办法,但这些办法都返回字符串的根本值

(2) 字符办法
    1.charAt(index) 返回指定索引地位的字符串
    2.charCodeAt(index) 以 Unicode 编码返回指定索引地位的字符串
(3) 字符串操作方法
    1.concat() 连贯字符串
    2.slice() 可提取字符串的某个局部,并以新的字符串返回被提获得局部
    3.substring() 提取字符串中两个指定的索引号之间的字符。4.substr() 从起始索引号提取字符串中
(4) 字符串地位办法
    1.indexOf(str,n) 从 n 开始搜寻第一个 str, 并将搜寻的索引值返回
    2.lastIndexOf(str,n) 从 n 开始搜寻的最初一个 str, 并将搜寻的索引值返回
(5) 大小写转换方法
    1.toLowerCase() 把字符串转换为小写
    2.toUpperCase() 把字符串转换为大写
    3.toLocaleLowerCase() 把字符串转换为小写。本地化
    4.toLocaleUpperCase() 把字符串转为大写。本地化
(6) 字符串的模式匹配办法
    1.match() 找到一个或多正则表达式的匹配
    2.replace() 替换与正则表达式匹配的子串
    3.search() 检索与正则表达式相匹配的值
    4.split() 把字符串宰割为字符串数组 

1.2 Math 对象

Math 对象用于执行数学工作。Math 对象并不像 Date 和 String 那样是对象的类,因而没有构造函数 Math(), 像 Math.sin() 这样的函数只是函数,不是某个对象的办法。无需创立它,通过把 Math 作为对象应用就能够调用其所有属性和办法。

1.2.1 对象属性

(1)E 返回算术常量 e, 即自然对数的底数 (约等于 2.718)
(2)LN2 返回 2 的自然对数 (约等于 0.693)
(3)LN10 返回 10 的自然对数(约等于 2.302)(4)LOG2E 返回以 2 为底的 e 的对数
(5)LOG10E 返回以 10 为底的 e 的对数 (约等于 0.434)
(6)PI 返回圆周率
(7)SQRT1_2 返回 2 的平方根的倒数
(8)SQRT2 返回 2 的平方根 

1.2.2 对象办法(上面为罕用的办法)

(1) 比拟办法
    Math.min()// 求一组数中的最小值
    Math.max()// 求一组数中的最大值
(2) 将小数值舍为整数的几个办法
    Math.ceil() 向上舍入
    Math.floor() 向下舍入
    Math.round() 四舍五入
(3) 随机数
    Math.random() 返回大于 0 小于 1 的一个随机数 [0,1)
退出移动版