JavaScript 常用数据类型及使用方式 -2

103 阅读4分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

前言

吃饱饭才有力气写代码~

昨天我们把基本数据类型 String Number Boolean Null Undefined 的定义以及使用方法基本上总结了一下。对于引用数据类型 Object Array 以及 Function 只是简单写了定义。今天就接着来学这一部分。

一.JavaScript 对象

1.1 定义

JavaScript 对象是拥有属性和方法的数据。生活中的对象,属性和方法:
例如:一辆汽车是一个对象,对象有它的属性如重量、颜色等,方法有启动、停止等。所有的汽车都有这些属性,只是每款车的属性不完全相同;所有汽车也都有这些方法,但是它们被执行的时间不完全相同;
JavaScript 中几乎所有的事物都是对象。 字符串、数值、数组、函数......此外,JavaScript 允许自定义对象。
比如:给一个变量赋值;

var car = "Fute";

对象也是一个变量,但对象可以包含多个值(多个变量),每个值以 name:value 对呈现。

var car = {name:"Fute", modal:500,color:"white"};

在这个实例中,三个值("Fute",500,"white")赋予变量car。

1.2 对象属性

JavaScript 对象是变量的容器。 但是我们通常认为 "Javascript" 对象是键值对的容器。键值对通常写法为 name : value (键与值以冒号分割)。 键值对在 JavaScript 对象中通常称为 对象属性。 访问对象属性的方法:

- car.name;
- car["name"];

1.3 对象方法

//定义一个方法
methodName : function() {
    // 代码 
}
//访问对象方法
objectName.methodName()

二.进阶

2.1 JavaScript内建对象

  • 布尔型可以是一个对象。
  • 数字型可以是一个对象。
  • 字符串也可以是一个对象
  • 日期是一个对象
  • 数学和正则表达式也是对象
  • 数组是一个对象
  • 甚至函数也可以是对象 对象只是带有属性和方法的特殊数据类型。

2.2 创建 Object 对象

2.2 1 使用Object定义并创建对象

在 JavaScript 中,几乎所有的对象都是 Object 类型的实例,它们都会从 Object.prototype 继承属性和方法。
Object 构造函数创建一个对象包装器。
Object 构造函数,会根据给定的参数创建对象。 语法格式:

new Object([value])

value 可以是任何值。

  • 如果给定是 null 或者 undefined,将会创建并返回一个空对象
  • 如果传进去的是一个基本类型的变量,则会构造其包装类型的对象
  • 如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址。
  • 当以非构造函数形式被调用时,Object 的行为等同于 new Object()。
var o = new Object(true);
//等价于 o = new Boolean(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"};
2.2 2 使用函数来定义对象,然后创建新的对象实例

使用函数来构造对象:

function person(firstname,lastname,age,eyecolor) 
{ 
    this.firstname=firstname; 
    this.lastname=lastname; 
    this.age=age; 
    this.eyecolor=eyecolor; 
}

this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象。

一旦有了对象构造器,就可以创建新的对象实例:
var myFather=new person("John","Doe",50,"blue");
var myMother=new person("Sally","Rally",48,"green");

2.3 给JavaScript 对象添加属性

  • 可以通过为对象赋值,向已有对象添加新属性
person.firstname="John";
person.lastname="Doe";
person.age=30;
person.eyecolor="blue";

2.4 给JavaScript 对象添加方法

方法只不过是附加在对象上的函数。可以在构造器函数内部定义对象的方法。

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;
    }
}

2.5 JavaScript for...in 循环

JavaScript 用 for... in 来循环遍历对象的属性。 例如:

var person={fname:"John",lname:"Doe",age:25}; 
for (x in person) 
{
    txt=txt + person[x];
}//JognDeo25

2.6 JavaScript 对象可变

对象是可变的,但是不会创建副本,而是通过引用来传递的。
而且改动其中一个的属性,其他对象的相应属性也会变化。

var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"} 
var x = person; 
x.age = 10; // x.age 和 person.age 都会改变

三. new 和 不new

  • 如果 new 了函数内的 this 会指向当前这个 person 并且就算函数内部不 return 也会返回一个对象。
  • 如果不 new 的话函数内的 this 指向的是 window。
function person(firstname,lastname,age,eyecolor)
{
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;
    return [this.firstname,this.lastname,this.age,this.eyecolor,this] 
}

var myFather=new person("John","Doe",50,"blue");
var myMother=person("Sally","Rally",48,"green");
console.log(myFather) // this 输出一个 person 对象
console.log(myMother) // this 输出 window 对象