对象的本质和意义:(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中数组的特点:(有下标,从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;
数组操作:
数组名.方法
数组和对象的区别
在 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长度的类数组(伪数组)转换成真正的数组。