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,
可以分为两类:静态类和动态类
静态类:不需要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 , in
数组可以使⽤for循环遍历原生js和js的区别
也可以使⽤in遍历⼀般使⽤in
for-in的特点:
没有循环条件
⾃动取出下标,
下标默认从 0 开始,最⼤下标数组长度-1
下标的类型为string
当需要返回两个值时,可以⽤对象{ }或数组[ ]的形式返回;
只能⽤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) {
String().indexOf("Array") > -1;
}
③假如对象由给定的构造器创建,则 instanceof 运算符返回 true:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits instanceof Array // 返回 true
④最准确的数据类型的判断String.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(String.call(a) === '[object String]');//true
console.log(String.call(b) === '[object Number]');//true
console.log(String.call(c) === '[object Object]');//true
console.log(String.call(d) === '[object Array]');//true
console.log(String.call(e) === '[object Function]');//true
console.log(String.call(f) === '[object Undefined]');//true
console.log(String.call(g) === '[object Null]');//true
console.log(String.call(h) === '[object Date]');//true
console.log(String.call(i) === '[object RegExp]');//true
console.log(String.call(c) === '[object Object]');//true
console.log(String.call(d) === '[object Object]');//false
console.log(String.call(e) === '[object Object]');//false
Array.from(对象)可以将⼀个具有length长度的类数组(伪数组)转换成真正的数组。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论