js中的对象(object:对象和数组)以及对象的常用方法

对象的本质和意义:(object)

对象是一个整体,用于描述一个事物的所有的相关信息

内容之间用“,”分隔,最后一个不加逗号

对象中一般有属性(静态)和方法(动态,方法是作为属性来存储的函数。):

你可以想象成对象就是一个人,这个人的身高,体型,性格是他本身的属性,是静态的;而这个人喜欢打篮球,喜欢吃东西,这就是他的动作也就是方法,是动态的;

使用{ }去定义一个对象,数据由键值对的组合方式;值可以是任意数据类型;

var obj = {

    sex : "不详",

    socre : 100,

    flag : true,

    sing : function{
       console.log("爱唱歌")
      },

    play : function{
       console.log("打游戏")
      }

  }

对象的操作: 访问值:(查) console.log(obj.sex); console.log(obj[
"socre"]); console.log(obj.sing()); 添加一个属性:(增) obj.hobby = "睡觉"; obj["weight"] = “50kg”; obj.dance = function(){   } 修改:(改) obj.sex = “女”; obj[“socre”] = 99; 删除:(删) delete obj.flag; delete obj["sex"];

  访问属性的时候,可以用obj.属性或者obj["属性"];需要执行方法(了解这个人)的时候,需要用“.”的方式去调用。

 

W3C的官网文档中提到:

 如果通过关键词 "new" 来声明 JavaScript 变量,则该变量会被创建为对象:


var x = new String();        // 把 x 声明为 String 对象
var y = new Number();        // 把 y 声明为 Number 对象
var z = new Boolean();       //    把 z 声明为 Boolean 对象

请避免将字符串、数值或逻辑声明为对象。他们会增加代码的复杂性并降低执行速度

 

  扩展

JavaScript有3大对象,分别是本地对象内置对象宿主对象;

  这里引用别人的话:本地对象也经常被叫做原生对象或内部对象,包含Global和Math在内的内置对象在《JavaScript高级程序设计》里也被叫做单体内置对象,很多时候,干脆也会直接把本地对象和内置对象统称为“内置对象”,也就是说除了宿主对象,剩下的都是ECMAScript的内部的“内置”对象。

 

  这里说说内置对象:
  JS内置对象也被称为内部类。所谓的内部类,就是JavaScript里面封装好了的类(也就是我们不需要去自己写,可以拿过来用)。

 

  JavaScript中的内部类大致有:Array,Boolean,Date,Math,Number,String,RegExp.....

 

可以分为两类:静态类和动态类

 

  静态类:不需要new,直接调用这个类的属性或方法即可,例如:Math    Math.pow()

 

  动态类:需要new,然后再调用对象的方法或者属性  var arr =  new Array(4,5,6);   arr.push()
 
 

数组就是一组数据的集合

js中数组的特点:(有下标,从0开始;有长度,length)

①数组定义时无需指定数据类型;

②数组定义时可以无需指定数组长度;

③数组可以存储任何数据类型的数据;

④一般是相同的数据类型。

 

数组的创建方式:

①字面量定义:var arr = [值1,值2,值3];(数组文本方法)

②构造函数创建:new Array(值1,值2,值3);            //当括号中没有值的时候,打印结果为[ ](空数组);

   创建数组并指定长度(只有一个值的时候为起初的长度,可自己增加值来改变这个长度):new Array(size);

  W3C中提出,出于简洁、可读性和执行速度的考虑,请使用第一种方法(数组文本方法)

 

var ary = new Array(4);

ary[0] = 12;

ary[1] = 13;

ary[2] = 14;        //加入值      数组名[下标] = 值 

长度为4,只加入了三个值,则第四个值为undefined;

 

数组操作

数组名.方法

    1)push(5,4,3)--向数组末尾添加新的数组项,返回值新数组的长度,原数组改变  
         2)pop()--删除数组最后一项,没有参数,返回值删除项,原数组改变              
         3)unshift()--向数组开头位置添加,返回值是新数组的长度,原数组改变                    
         4)shift()--删除数组第一项,没有参数,返回值删除项,原数组改变 
 
        (以下是扩展方法) :                        
         5)splice()--原数组改变             
          splice(n,m)--从索引(下标)n开始,删除m个,返回值以数组的形式返回删除项          
               splice(n)--从索引n开始删除到最后             
               splice(0)--原数组清空,返回一个和原来一样的新数组            
               splice(n,m,z);从索引(下标)n开始,删除m个,把z添加到删除的位置                                 
         6)slice(n,m)--从索引n开始,查找到索引m处,不包含m,将查找到的以新数组返回,原数组不变                        
         7)concat--数组的拼接,不改变数组,返回最终连接好的新数组;                                
         8)数组转为字符串:不改变原数组             
              toString()        join('符号')         (数组.join()可以直接转数组)
 
清空数组的方式:
①arr.splice(0);
②arr.length = 0;
③arr = [ ];
 
数组的遍历:
for , for...in
数组可以使用for循环遍历  
也可以使用for...in遍历  一般使用for...in
for-in的特点:
     没有循环条件 
     自动取出下标,
     下标默认从 0 开始 ,最大下标  数组长度-1
     下标的类型为string
 
 
当需要返回两个值时,可以用对象{ }或数组[ ]的形式返回;
只能用for...in遍历对象,for不能遍历对象;(因为对象的键是一个变量)在遍历时[ ]中不能加引号;
 
一些数组类型:
整数数组 :  [12,3,4,5,6]
字符串数组 : ["orange","apple","pear"]
对象数组 : [{sname:"jack",age:19},{sname:"lily",age:18}]
二维数组 : [[1,3,4],[5,6,7],[1,2,5]]   (一个数组的每一项都是一个数组)
    

数组和对象的区别

在 JavaScript 中,数组使用数字索引。

在 JavaScript 中,对象使用命名索引。

数组是特殊类型的对象,具有数字索引。

 

在数组中使用数字(下标)来访问其“元素”。

在对象使用名称(属性名称和方法名称)来访问其“成员”。

 

     在数据类型检验的时候,利用typeof来检验数组的时候说过会返回一个object;那么怎么检验一个数是不是数组呢;

     ①为了解决这个问题,ECMAScript 5 定义了新方法 Array.isArray()

Array.isArray(fruits);     // 返回 true

    ②也可以自己封装出一个isArray方法

function isArray(x) {
    return x.constructor.toString().indexOf("Array") > -1;
}

     ③假如对象由给定的构造器创建,则 instanceof 运算符返回 true:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
 
fruits instanceof Array     // 返回 true

      ④最准确的数据类型的判断Object.prototype.toString.call()

let a = "string";
let b = 111;
let c = {};
let d = [1, 2, 3];
let e = function () {
    console.log("eee");
}
let f = undefined;
let g = null;
let h = new Date();
let i = /test/;
let j = true;

console.log(Object.prototype.toString.call(a) === '[object String]');//true
console.log(Object.prototype.toString.call(b) === '[object Number]');//true
console.log(Object.prototype.toString.call(c) === '[object Object]');//true
console.log(Object.prototype.toString.call(d) === '[object Array]');//true
console.log(Object.prototype.toString.call(e) === '[object Function]');//true
console.log(Object.prototype.toString.call(f) === '[object Undefined]');//true
console.log(Object.prototype.toString.call(g) === '[object Null]');//true
console.log(Object.prototype.toString.call(h) === '[object Date]');//true
console.log(Object.prototype.toString.call(i) === '[object RegExp]');//true

console.log(Object.prototype.toString.call(c) === '[object Object]');//true
console.log(Object.prototype.toString.call(d) === '[object Object]');//false
console.log(Object.prototype.toString.call(e) === '[object Object]');//false

   Array.from(对象)可以将一个具有length长度的类数组(伪数组)转换成真正的数组。

原文地址:https://www.cnblogs.com/cqdd/p/10191356.html