js中对Object对象的有个别常用操作总结,分享Ja
分类:关于计算机

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

前言我前面的文章,写过js中“类”与继承的一些文章。ES5我们可以通过 构造函数 或者 Object.create()等方式来模拟出js中的“类”,当然,对象呢是类的实例化,我们可以通过如下方式创建对象:var haorooms ={};或者var haorooms = new Object()今天主要总结一下Object的一些常用方法。Object.assign()1、可以用作对象的复制var obj = { a: 1 };var copy = Object.assign({}, obj);console.log(copy); // { a: 1 }2、可以用作对象的合并var o1 = { a: 1 };var o2 = { b: 2 };var o3 = { c: 3 };var obj = Object.assign(o1, o2, o3);console.log(obj); // { a: 1, b: 2, c: 3 }console.log(o1); // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。上面我们看到,目标对象o1自身也发生了改变。假如我们不想让o1改变,我们可以把三个对象合并到一个空的对象中,操作如下: var obj = Object.assign({},o1, o2, o3);console.log(obj); // { a: 1, b: 2, c: 3 }console.log(o1); // { a: 1 }注意:以下几个地方可能copy或者合并不成功,经常在面试中出现!1、继承属性和不可枚举属性是不能拷贝的var obj = Object.create({foo: 1}, { // foo 是个继承属性。 bar: { value: 2 // bar 是个不可枚举属性。 }, baz: { value: 3, enumerable: true // baz 是个自身可枚举属性。 }});var copy = Object.assign({}, obj);console.log(copy); // { baz: 3 }2、原始类型会被包装为 objectvar v1 = "abc";var v2 = true;var v3 = 10;var v4 = Symbol("foo")var obj = Object.assign({}, v1, null, v2, undefined, v3, v4); // 原始类型会被包装,null 和 undefined 会被忽略。// 注意,只有字符串的包装对象才可能有自身可枚举属性。console.log(obj); // { "0": "a", "1": "b", "2": "c" }3、异常会打断接下来的拷贝任务var target = Object.defineProperty({}, "foo", { value: 1, writable: false}); // target 的 foo 属性是个只读属性。Object.assign(target, {bar: 2}, {foo2: 3, foo: 3, foo3: 3}, {baz: 4});// TypeError: "foo" is read-only// 注意这个异常是在拷贝第二个源对象的第二个属性时发生的。console.log(target.bar); // 2,说明第一个源对象拷贝成功了。console.log(target.foo2); // 3,说明第二个源对象的第一个属性也拷贝成功了。console.log(target.foo); // 1,只读属性不能被覆盖,所以第二个源对象的第二个属性拷贝失败了。console.log(target.foo3); // undefined,异常之后 assign 方法就退出了,第三个属性是不会被拷贝到的。console.log(target.baz); // undefined,第三个源对象更是不会被拷贝到的。Object.create()这个我之前就提到过了,可以模拟出js中的“类”。具体可以看:, [ propertiesObject ])第二个参数是可选的,主要用于指定我们创建的对象的一些属性,(例如:是否可读、是否可写,是否可以枚举等等)可以通过下面案例来了解第二个参数!var o;o = Object.create(Object.prototype, { // foo会成为所创建对象的数据属性 foo: { writable:true, configurable:true, value: "hello" }, // bar会成为所创建对象的访问器属性 bar: { configurable: false, get: function() { return 10 }, set: function(value) { console.log("Setting `o.bar` to", value) }}})// 创建一个以另一个空对象为原型,且拥有一个属性p的对象o = Object.create({}, { p: { value: 42 } })// 省略了的属性特性默认为false,所以属性p是不可写,不可枚举,不可配置的:o.p = 24o.p//42o.q = 12for (var prop in o) { console.log(prop)}//"q"delete o.p//false//创建一个可写的,可枚举的,可配置的属性po2 = Object.create({}, { p: { value: 42, writable: true, enumerable: true, configurable: true } });Object.is()用来判断两个值是否是同一个值。下面是一些例子,面试中可能会提及Object.is('haorooms', 'haorooms'); // trueObject.is(window, window); // trueObject.is('foo', 'bar'); // falseObject.is([], []); // falsevar test = { a: 1 };Object.is(test, test); // trueObject.is(null, null); // true// 特例Object.is(0, -0); // falseObject.is(-0, -0); // trueObject.is(NaN, 0/0); // trueObject.keys()这个方法会返回一个由给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。例如:/* 类数组对象 */ var obj = { 0 : "a", 1 : "b", 2 : "c"};alert(Object.keys(obj)); // 弹出"0,1,2"/* 具有随机键排序的数组类对象 */var an_obj = { 100: 'a', 2: 'b', 7: 'c' };console.log(Object.keys(an_obj)); // console: ['2', '7', '100']常用其他操作1、删除对象中的某个值,前面案例中也谢了可以直接用deletedelete o.p2、对象循环,这个我之前单独写了一篇文章: haorooms={};//可以这么写haorooms["前端博客"]="Haorooms,Aaron个人博客。记录本人工作中遇到的问题,以及经验总结和分享!";//但是假如如下写就会报错!haorooms["前端博客"]["des"]="Haorooms,Aaron个人博客。记录本人工作中遇到的问题,以及经验总结和分享!"//Uncaught TypeError: Cannot set property 'des' of undefined我们在循环多层赋值的时候可以这么写:var haorooms={};haorooms["前端博客"] = haorooms["前端博客"] || {};haorooms["前端博客"]["des"]=haorooms["前端博客"]["des"] || "Haorooms,Aaron个人博客。记录本人工作中遇到的问题,以及经验总结和分享"这样就可以多层赋值了!此方法同样可以应用在数组上面!其他一些不是很常用的对象操作属性。如下:1、Object.freeze() 方法可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。2、Object.isFrozen() 方法判断一个对象是否被冻结(frozen)。3、Object.isExtensible() 方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。4、Object.isSealed() 方法判断一个对象是否是密封的(sealed)。5、Object.seal() 方法可以让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可能可以修改已有属性的值的对象。

承接上一篇,

Object

keys

object的keys方法能够获取一个给定对象的所有键(key/属性名)并以数组的形式返回。这个方法可以用于键的筛选、匹配等。

var basket = {
strawberry: 12,
banana: 20,
apple: 30,
juice: 20
};
console.log(Object.keys(basket)); 
//[ 'strawberry', 'banana', 'apple', 'juice' ]

create

create方法用于创建一个新的对象,可选参数(proto, [ propertiesObject ]),第一个为原型,比如Array.prototype之类的,第二个为需要给新建对象的一些新属性之类的,这个参数对象的属性名将是新建对象的属性,值则是属性描述符(value、writable、configurable等)。

var o = Object.create({}, {p: {value: 42}});
var O = Object.create({}, {p: {value: 66, writable: true, enumerable: true}});
console.log(o.p); //42
console.log(O.p); //66
o.p = 20;
O.p = 80;
console.log(o.p); //42
console.log(O.p); //80

属性描述符中writable默认为false,因此o.p即便在后来重新赋值也是不能改变其值的,而O.p则能够在后来改变值,此外,create方法proto必须传入相应参数,否则会报错TypeError,当然以上代码在严格模式下也会报错,因为o.p被重写-

assign

assign方法,es6的新特性,支持传参(target, …sources),用于将任意多个源对象的键值对添加的目标对象,类似于lodash的assign和underscore的extendOwn方法。

var boy = {handsome: true, rich: true}, girl = {cute: true, hair: 'long'};
var couples = Object.assign({}, boy, girl);
console.log(couples); //{ handsome: true, rich: true, cute: true, hair: 'long' }

assign方法常用于框架层面的数据处理,比如你定义了一个client用于发送HTTP请求,使用的时候获取接受到的参数之外自己可能得加上什么默认的属性。

Number

isNaN

Number的isNaN方法用来判断传入值是否是NaN的值,与全局的isNaN方法不同的是它不会强制将传入参数转化为数字类型,只有在参数是真正的数字类型,且值为 NaN 的时候才会返回 true。不过就自己而言全局的isNaN用的多一点,就用来判断字符串是不是只包含数字,

console.log(isNaN('123f')); //true
console.log(isNaN('123')); //true

此外,isFinite(value)方法用于判断传入参数是否是有穷数,isInteger(value)方法用于判断传入参数是否是整数。

toFixed

toFixed方法用来将数字转化为特定的字符串,支持传入参数(digits),0 < digits <= 20,在转换的时候会自动进行四舍五入以及0补充。

var cool = 666.666;
console.log(cool.toFixed(1)); //666.7
console.log(cool.toFixed(6)); //666.666000

这段时间发生了很多事情,从待了116天的杭州来到北京,开始一段新的工作与生活。不舍、惆怅、激动、兴奋等情绪交织缠绵…七匹狼,认识了其余六狼,很珍惜这段大家一起努力一起嗨皮的日子,尤记得夜爬宝石山,俯瞰西湖,English poor,哈哈哈…

ps:javascript split() 定义和用法

split() 方法用于把一个字符串分割成字符串数组。

语法

stringObject.split(separator,howmany)
参数 描述
separator 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。
howmany 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

您可能感兴趣的文章:

  • 比较简单实用的使用正则三种版本的js去空格处理方法
  • js 表单验证方法(实用)
  • javascript写的简单的计算器,内容很多,方法实用,推荐
  • js+数组实现网页上显示时间/星期几的实用方法
  • JS判断数组中是否有重复值得三种实用方法
  • js去除空格的12种实用方法
  • JS+CSS实现实用的单击输入框弹出选择框的方法
  • js实现跨域的4种实用方法原理分析

本文由正版必中一肖图发布于关于计算机,转载请注明出处:js中对Object对象的有个别常用操作总结,分享Ja

上一篇:javascript图片预加载实例分析,javascript图片预加载 下一篇:谬误的消除办法,302谬误的方法
猜你喜欢
热门排行
精彩图文