php object keys_原生js中Object.keys方法详解

实际开发中,有时需要知道对象的所有属性,原生js提供了一个方法Object.keys()。

Object.keys(obj)返回的是一个数组,该数组的所有元素都是字符串。这些元素是来自于给定的obj可直接枚举的属性,这些属性的顺序与手动遍历该对象属性时的一致。

一. 传入数组:返回索引

var arr = ["a", "b", "c"];

console.log(Object.keys(arr)); // console: ["0", "1", "2"]

二. 传入对象:返回属性名

var obj = {'a':'123','b':'345'};

console.log(Object.keys(obj)); //['a','b']

var obj1 = { 100: "a", 2: "b", 7: "c"};

console.log(Object.keys(obj1)); // console: ["2", "7", "100"]

var obj2 = Object.create(

{},

{

getFoo : {

value : function () { return this.foo }

}

}

);

obj2.foo = 1;

console.log(Object.keys(obj2)); // console: ["foo"]

三.传入字符串:返回索引

var str = 'ab1234';

console.log(Object.keys(str)); // ["0","1","2","3","4","5"]

四、构造函数:返回空数组或者属性名

function Pasta(name, age, gender) {

this.name = name;

this.age = age;

this.gender = gender;

this.toString = function () {

return (this.name + ", " + this.age + ", " + this.gender);

}

}

console.log(Object.keys(Pasta)); //console: []

var spaghetti = new Pasta("Tom", 20, "male");

console.log(Object.keys(spaghetti)); //console: ["name", "age", "gender", "toString"]

五、注意事项

在ES5里,如果此方法的参数不是对象(而是一个原始值),那么它会抛出 TypeError。在ES6中,非对象的参数将被强制转换为一个对象。

Object.keys("foo");

// TypeError: "foo" is not an object (ES5 code)

Object.keys("foo");

// ["0", "1", "2"] (ES2015 code)

六、要在原生不支持的就环境中添加兼容的Object.keys(),可以添加以下脚本:

if (!Object.keys) {

Object.keys = (function () {

var hasOwnProperty = Object.prototype.hasOwnProperty,

hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),

dontEnums = [

'toString',

'toLocaleString',

'valueOf',

'hasOwnProperty',

'isPrototypeOf',

'propertyIsEnumerable',

'constructor'

],

dontEnumsLength = dontEnums.length;

return function (obj) {

if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');

var result = [];

for (var prop in obj) {

if (hasOwnProperty.call(obj, prop)) result.push(prop);

}

if (hasDontEnumBug) {

for (var i=0; i < dontEnumsLength; i++) {

if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);

}

}

return result;

}

})()

};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中望3d快捷键命令大全_CAD、3D快捷命令

1、对象特性ADC, *ADCENTER(设计中心“Ctrl&#xff0b;2”)CH, MO *PROPERTIES(修改特性“Ctrl&#xff0b;1”)MA, *MATCHPROP(属性匹配)ST, *STYLE(文字样式)COL, *COLOR(设置颜色)LA, *LAYER(图层操作)LT, *LINETYPE(线形)LTS, *LTSCALE(线形比例)LW, *LWEIGHT(线宽)UN, *U…

php 字符串函数 教程_PHP 字符串获取 substr 与 strstr 函数

PHP 字符串获取用于从字符串中获取指定字符串。相关函数如下&#xff1a;substr()&#xff1a;从字符串中获取其中的一部分strstr()&#xff1a;查找字符串在另一个字符串中第一次出现的位置&#xff0c;并返回从该位置到字符串结尾的所有字符subchr()&#xff1a;同 strstr()s…

can通道采样频率_CAN采样点设置为多少合适?设置不对会咋样?

网上有人说道&#xff1a;(1)一般配置在75-80%的位置(2)选择采样点位置在85%左右为佳(3)75% when 波特率 > 800K80% when 波特率 > 500K87.5% when 波特率 < 500K那么到底是多少呢&#xff1f;本博主在ISO11898-1没有找到确切的值。但是cia官网找到了(http:…

简单的php,php简单语句

标签&#xff1a;(01)PHP标记 <?php ?>?>(02)输出语句//echo 不加括号能打印多个值//print 有返回值不能打印多个值//die() 输出并退出程序//exit() 输出并退出程序//printf() 格式化输出//sprintf() 格式化返回//var_dump() 输出全部信息和内…

内固定取出术后护理_股骨内固定钢板取出术后护理查房记录范文

病情分析&#xff1a;2009年10月26日 手术后精神,饮食,睡眠,体重变化等指导意见&#xff1a;一, 护理业务查房&#xff1a;  1, 临床临床护理查房&#xff1a;  是对新入,危重病人的现存护理问题,措施,护理效果,护理质量进行的护理查房,目的是检查,指导责任护士的工作质量,…

python echo命令_如何用Python调用外部命令

解决方法方法1&#xff1a;我们可以使用subprocess&#xff0c;比如要执行 ls -l 命令import subprocesssubprocess.run("ls", "-l")Python3.5 之前的版本&#xff0c;需要使用 callimport subprocesssubprocess.call(["ls", "-l"])方…

vba php,VBA

【行业前景】很多时候&#xff0c;当我们提起VBA&#xff0c;就想到和Excel有关&#xff0c;其实这里所提到的VBA是依附在Excel平台上进行的二次开发&#xff0c;当然它还可以大量应用在其他的软件中&#xff0c;可用VBA进行二次开发。对于我们最常使用的Excel&#xff0c;VBA可…

ios 捕抓crash_ios crash的原因与抓取crash日志的方法

首先我们经常会闪退的异常有哪些呢&#xff1f;crash的产生来源于两种问题&#xff1a;违反iOS策略被干掉&#xff0c;以及自身的代码bug。1.IOS策略1.1低内存闪退前面提到大多数crash日志都包含着执行线程的栈调用信息&#xff0c;但是低内存闪退日志除外&#xff0c;这里就先…

php 多线程上传,PHP CURL 多线程操作代码实例

/** Curl 多线程类* 使用方法&#xff1a;* $urls array("http://baidu.com", "http://dzone.com", "http://google.com");$mp new MultiHttpRequest($urls);$mp->start();* */class MultiHttpRequest {public $urls array();public $curl…

jlabel 不能连续两次set_为什么有时连续多次setState只有一次生效?

例如下面的代码&#xff0c;两次打印出的结果是相同的&#xff1a;componentDidMount() {this.setState({ index: this.state.index 1 }, () > {console.log(this.state.index);})this.setState({ index: this.state.index 1 }, () > {console.log(this.state.index);}…

java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别

[Java教程]Java字节流与字符流的区别0 2017-05-22 12:00:42字节流与和字符流的使用非常相似&#xff0c;两者除了操作代码上的不同之外&#xff0c;是否还有其他的不同呢&#xff1f;实际上字节流在操作时本身不会用到缓冲区(内存)&#xff0c;是文件本身直接操作的&#xff0c…

redis主从集群搭建eclipse_【Redis】Redis 主从模式搭建

主从模式介绍Redis虽然读取写入的速度都特别快&#xff0c;但是也会产生读压力特别大的情况。为了分担读压力&#xff0c;Redis支持主从复制&#xff0c;Redis的主从结构可以采用一主多从或者级联结构&#xff0c;Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图…

unicode编码 php,PHP 的 UNICODE 编码和解码

方法一:function unicode_encode($name){$name iconv(UTF-8, UCS-2, $name);$len strlen($name);$str ;for ($i 0; $i < $len - 1; $i $i 2){$c $name[$i];$c2 $name[$i 1];if (ord($c) > 0){ //两个字节的文字$str . \u.base_convert(ord($c), 10, 16).str_pad…

django models索引_sql – 为什么Django显式地在唯一字段上创建索引

更新&#xff1a;进一步简化实验psql的Q&#xff1a;对于以下Django模型&#xff1a;class Book(models.Model):name models.TextField(uniqueTrue)pg_dump(PostgreSQL 9.3)显示下表&限制&#xff1a;CREATE TABLE book (id integer NOT NULL,name text NOT NULL,);ALTER …

php获取指定日期的万年历,分享3个php获取日历的函数

提供一个日期,获取这个日期的星期对应日历列表,键为星期标示$month_date 2015-09-25;$start_time strtotime($month_date);$start_week date(w, $start_time);$total_month_day date(t, $start_time);$weeks_in_month ceil(($start_week$total_month_day)/7);$month_day_a…

php获取html中文本框内容_小猿圈Python入门之批量获取html内body内容的方法

对于人工智能你了解有多少&#xff1f;你知道Python的使用吗&#xff1f;这个对于大部分初学者来说都是很难的&#xff0c;小猿圈Python讲师会每天为大家选择分享一个知识点&#xff0c;希望对你学习Python有所帮助&#xff0c;今天分享的就是批量获取html内body内容的方法。现…

php改名下载,PHP如何给上传的文件改名

PHP如何给上传的文件改名发布时间&#xff1a;2020-08-03 16:07:39来源&#xff1a;亿速云阅读&#xff1a;72作者&#xff1a;LeahPHP如何给上传的文件改名&#xff1f;相信很多没有经验的人对此束手无策&#xff0c;为此本文总结了问题出现的原因和解决方法&#xff0c;通过这…

python 循环 覆盖之前print内容_Python爬虫第二战---爬取500px图片

前言&#xff1a;如今的高速网络极大促进了信息的展示方式&#xff0c;高清图片&#xff0c;视频等成就了我们的视听盛宴。但是&#xff0c;我们获取到的图片或者视频可能是被压缩过的&#xff0c;所以总体上还是有点小瑕疵&#xff0c;今天呢&#xff0c;我给大家带来一篇使用…

php字符串分割tp模板,ThinkPHP 模板substr的截取字符串函数详解

ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码/**** 截取中文字符串**/function msubstr($str, $start0, $length, $charset"utf-8", $suffixtrue){if(function_exists("mb_substr")){$slice mb_substr($str, $start, $length, $…

macyy_macyy进频道失败怎么办

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。macyy进频道失败的解决方法&#xff1a;1、进入不了频道请先留意自己当地的网络状况是否良好&#xff0c;电脑上尽量不要开启占用网络资源的软件&#xff0c;如&#xff1a;下载工具…