小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2024-02-23 / 15 阅读
0
0

JavaScript object(对象)以及与数组,php区别

JavaScript object(对象)

让我们将信息结合在一起,方便管理。

写法

{
name:"海底捞",
price:100,
}

console输出结果

console.log({
name:"海底捞",
price:100,
});
//输出:{name:"海底捞",price:100,}

可以用变量将对象存储起来

let product ={
name:"海底捞",
price:100,
};
//用console显示
console.log(product);

可通过下面方式取得对象中的属性

let product ={
name:"海底捞",
price:100,
};
//用console显示
console.log(product.name);
//或
product["name"]; //必须通过引号写成字串形式
//输出结果为海底捞

可使用变量的方式将对象中的属性修改

let product ={
name:"海底捞",
price:100,
};
//用console显示
console.log(product);
product.price = 300;
console.log(product);
//可以看到price的值由100修改为了300

可以通过下面方式添加属性

let product ={
name:"海底捞",
price:100,
};
//用console显示
console.log(product);
product.price = 300;
console.log(product);
//可以看到price的值由100修改为了300
product.guoqi ="2027/6/7"
console.log(product);
//可以看到product新增了个属性名叫guoqi,其值为2027/6/7

JavaScript object(对象)与数组(Arry)区别

JavaScript中的数组(Array)和对象(Object)在数据结构和用途上有明显的区别:

数组(Array:

  • 数组是一种特殊的对象,用于存储有序的、可通过索引访问的数据集合。
  • 创建数组使用方括号 [],元素之间用逗号分隔。
  • 数组的索引是数字类型的,从0开始递增。
  • 数组提供了很多内建方法,如 push()pop()shift()unshift()splice()slice()sort()reverse() 等,方便对数组进行操作。
  • 可以通过 length 属性获取数组的长度。

示例:

let arr = [1, 2, "three", {name: "John"}];
console.log(arr[0]); // 输出: 1
arr.push(4); // 在数组末尾添加元素let arr = [1, 2, "three", {name: "John"}];
console.log(arr[0]); // 输出: 1
arr.push(4); // 在数组末尾添加元素

对象(Object:

  • 对象是无序的键值对集合,键必须是字符串类型(ES6中可以是Symbol类型),值可以是任意类型,包括函数(即方法)。
  • 创建对象通常使用花括号 {} 或者构造函数 new Object(),属性名与对应的值之间用冒号 : 分隔,不同属性间用逗号 , 分隔。
  • 对象的属性可以通过点记法 object.property 或者括号记法 object['property'] 来访问或修改。
  • 对象没有预定义的顺序,不能直接通过索引访问其属性。
  • JavaScript提供了一些内建方法来操作对象,如 Object.keys()Object.values()Object.entries()Object.assign()Object.create() 等。

示例:

let obj = {
  name: "Alice",
  age: 30,
  sayHello: function() {
    console.log("Hello, my name is " + this.name);
  }
};

console.log(obj.name); // 输出: Alice
obj.sayHello(); // 调用对象的方法,输出: Hello, my name is Alice

总结:

  • 数组 是有序的,可以通过索引(数字)访问元素,适合处理一组具有顺序关系的数据。数组有长度。数组键值可以重复,调用方法不同
  • 对象 是无序的,通过字符串键访问属性,更适合描述一个实体的各种属性和行为。对象没有长度。对象没有长度,不能用for循环,对象键值唯一,调用方法不同
  • 创建方式不同:数组表示有序数据的集合,而对象表示无序数据的集合。数组的数据没有”名称”(name),对象的数据有”名称”(name)。

JavaScript和PHP在处理对象(在PHP中通常称为关联数组或字面量)时存在一些显著的区别:

JavaScript对象

  • JavaScript中的对象是动态的键值对集合,键可以是任何可转化为字符串的类型,但实践中通常为字符串或Symbol。

  • 创建方式可以是通过对象字面量 {} 或者 new Object() 构造函数。

  • 属性可以直接添加、删除或修改,无需预先声明。

  • 对象方法可以通过 .符号调用。

  • 提供了原型链(Prototype chain)支持继承。

    let jsObj = {
      name: "John",
      age: 30,
      greet: function() {
        console.log("Hello, my name is " + this.name);
      }
    };
    

PHP关联数组/对象

  • PHP有两种数据结构与JavaScript的对象类似:关联数组(array)和类实例(objects)。

  • 关联数组是一个键值对集合,其中键必须是字符串或整数,而值可以是任意类型。创建关联数组不需要特殊的构造函数,直接使用方括号 [] 或者 array() 函数。

  • 类实例则需要先定义一个类(class),然后通过 new 关键字创建实例,属性和方法需要在类定义中声明,但也可以动态地给对象添加属性。

  • 方法通过 -> 符号调用。

    // PHP关联数组示例
    $phpArray = array(
      'name' => 'John',
      'age' => 30,
    );
    
    // PHP类实例示例
    class Person {
      public $name;
      public $age;
    
      public function greet() {
        echo "Hello, my name is " . $this->name . ".";
      }
    }
    
    $person = new Person();
    $person->name = "John";
    $person->age = 30;
    $person->greet(); // 输出:Hello, my name is John.
    

区别总结:

  1. 动态性:JavaScript对象的属性可以在任何时候动态添加和删除,PHP关联数组也支持动态添加属性,但类实例的方法和属性需要预先定义或使用 __get__set等魔术方法实现动态属性访问。
  2. 语法:JavaScript使用 .或者 [ ]访问属性和方法,PHP使用 ->访问对象的属性和方法,关联数组则使用 ['key']来访问键值。
  3. 继承机制:JavaScript基于原型继承,PHP基于类的面向对象编程,有严格的类继承体系,包括接口、抽象类等概念。
  4. 默认行为:PHP中,如果不显式声明类成员的访问修饰符,则默认为public;而在JavaScript中,默认情况下所有对象的属性都是公开的。

评论