JS 对象

在JS 中一切都是对象

JS是一门面向对象的语言,但它不使用类。JS是基于原型的。
字符串、数值、数组、函数...都可以是对象。此外还能自定义对象。且对象是一种特殊的数据,拥有属性和方法。

创建JS对象有两种方法

  1. 使用Object定义并创建对象
// 以构造函数的形式来调用
new Object([value])		// value可以是任何值

// 等价于 o = new Boolean(true);
var o = new Object(true);

// 创建对象并添加属性
person=new Object();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";

// 字面量
person={firstname:"John", lastname:"Doe", age:50, eyecolor:"blue"};
  1. 使用对象构造器(使用函数来定义对象,然后创建新的对象实例)
function person(firstname,lastname,age,eyecolor)
{
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;

	// 将方法赋予对象
    this.changeName=changeName;
	function changeName(name){
		this.lastname=name;
	}
}


var myFather=new person("John","Doe",50,"blue");
myFather.changeName("adwa");

JavaScript 的对象是可变的

对象是可变的,它们是通过引用来传递的。

var x = person;  // 不会创建 person 的副本,是引用

实现深拷贝可以看这个博客:
https://www.cnblogs.com/hyns/p/12405328.html


JS Prototype对象

所有的JS对象都有的prototype属性指向自己的prototype对象。所有的对象都会从自己的prototyoe对象中继承属性和方法。所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。

JS对象还会有一个指向原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。

添加属性和方法

有的时候我们想要在所有已经存在的对象添加新的属性或方法。

另外,有时候我们想要在对象的构造函数中添加属性或方法。

使用 prototype 属性就可以给对象的构造函数添加新的属性:

function Person(first, last, age, eyecolor) {
  this.firstName = first;
  this.lastName = last;
  this.age = age;
  this.eyeColor = eyecolor;
}
 
// 这样是不行的
Person.nationality = "English";
// 要在原型对象上添加
Person.prototype.nationality = "English";
通常使用构造器(函数体)定义属性,使用原型对象(prototype)定义方法。

如此,构造器只包含属性定义,而方法则分装在不同的代码块,使代码更具可读性。

注意:千万不能使用字面量的形式定义方法,因为原型会被重写。

function Fn() {};

// 定义属性
Fn.prototype.a = 1;
Fn.prototype.b = 2;

// 字面量定义方法,原型被重写,原有属性和方法被更新
Fn.prototype = {
  c : function() {
    return this.a + this.b;
  }
}

var foo = new Fn();
foo.c();  // NaN
foo.a;  // undefined
foo.b;  // undefined

Number对象

注意:JS不定义不同的数字类型,所有的数字其实都是浮点类型且均为64位。
遵循 IEEE 754 规范,采用双精度存储(double precision)

其中前52位(0-51)可以用来表示基数,后11位(52-62)表示指数。最后一位(63)表示符号。

  1. 科学计数法
var y = 123e5;    // 12300000
var z = 123e-5;   // 0.00123
  1. 八进制和十六进制
var y = 0377;    // 0开头八进制
var z = 0xFF;    // 0x开头十六进制

// 默认十进制

toString 方法可以输出对应进制数
var myNumber=128;
myNumber.toString(16);   // 返回 80
myNumber.toString(8);    // 返回 200
myNumber.toString(2);    // 返回 10000000
  1. Infinity 无穷大 和 NaN 非数字类型
    当数字超过JS数字类型表示范围则是无穷大,Infinity或者-Infinity。Infinity也是数字类型。
  2. 一些属性和方法
    在这里插入图片描述

RegExp对象,正则

  1. 创建,两种方法
var patt=new RegExp(pattern,modifiers);
var patt=/pattern/modifiers;
modifiers是修饰符,i是不区分大小写,g表示全局匹配(匹配所有的),m表示多行匹配。

具体规则,见 https://www.runoob.com/jsref/jsref-obj-regexp.html
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值