《JS权威指南学习总结--6.4检测属性》
内容要点:
js对象可以看做属性的集合,我们经常会检测集合中成员的所属关系-----判断某个属性是否存在于某个对象中,可以通过in运算符,hasOwnPreperty()和propertyIsEnumerable()方法来完成这个工作,甚至仅通过属性查询也可以做到这一点。
一.in运算符
in运算符的左侧是属性名(字符串),右侧是对象。如果对象的自有属性或继承属性中包含这个属性则返回true。
var o = {x:1}
"x" in o; //true,"x"是o的属性
"y" in o; //false, "y"不是o的属性
"toString" in o; //true,o继承toString 属性
二.hasOwnPproperty()方法
hasOwnProperty()方法用来检测给定的名字是否是对象的自有属性。对于继承属性它将返回false.
var o= {x:1}
o.hasOwnProperty("x"); //true,o有一个自有属性"x"
o.hasOwnProperty("y"); //false,o中不存在属性"y"
o.hasOwnProperty("toString"); //false,toString是继承属性
三.propertyIsEnumerable()方法
propertyIsEnumerable()方法是hasOwnProperty()的增强版,只有检测到自有属性且这个属性的可枚举性为true时它才返回true.某些内置属性的是不可枚举的。通常由js代码创建的属性都是可枚举的,除非使用Es5中使用一个特殊的方法来改变属性的可枚举性。
var o = inherit({ y : 2 });
o.x=1;
o.propertyIsEnumerable("x"); //true,o有一个可枚举的自有属性
o.propertyIsEnumberable("y"); //false,y是继承来的。
Object.property.propertyIsEnumberable("toString"); //false:不可枚举
四.
除了使用in运算符之外,另一种更简单的方法是使用"!=="判断一个属性是否是undefined;
var o = {x : 1}
o.x !==undefined; //true,o中有属性x
o.y!==undefined; //false,o中没有属性y
o.toString !==undefined; //true,o继承了toString属性
五.
然而有一种场景只能使用in 运算符而不能使用上述属性访问的方式。in 可以区分不存在的属性和存在但值为undefined的属性。例如
var o = { x : undefined } //属性被显式赋值为undefined;
o.x !==undefined; //false,属性存在,但值为undefined;
o.y!==undefined; //false,属性不存在
"x" in o; //true,属性存在
"y" in o; //fasle,属性不存在
delete o.x; //删除了属性x
"x" in o; //false,属性不再存在
注意:上述代码中使用的是"!=="运算符,而不是"!="。"!=="可以区分undefined和null,有时则不必作这种区分。
//如果o中含有属性x,且x的值不是null或undefined,o.x乘以2
if(o.x!=null)o.x*=2;
//如果那个o中含有属性x,且x的值不能转换为false o.x乘以2
//如果x是undefined、null、false、" "、0或NaN,则它保存不变
if(o.x) o.x*=2;
《JS权威指南学习总结--6.4检测属性》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- curl命令PostJson
curl -H "Content-Type: application/json" -X POST --data '{"data":"1"} ...
- JavaEE XML SAX解析
SAX解析XML @author ixenos SAX解析工具 SAX解析工具- Sun公司提供的.内置在jdk中.org.xml.sax.* 核心的API: SAXParser类: 用于读取和解析 ...
- [趣味]WhirlPolygon——彩色旋转正多边形
此程序用于在AutoCAD中以直线绘制彩色旋转正多边形供欣赏~ 此程序附属MagicTable(可到依云官网下载:http://www.yiyunsoftware.com/),安装之即可使用该程序. ...
- Discuz! X3.2重置管理员账号
主要是使用了Tools急诊箱.先看一下Tools急诊箱的主要功能: 多种模式在线安装Discuz!,或者重装 重置管理员账号:将把您指定的会员设置为管理员 关闭功能:一键关闭/打开 [站点|插件]的操 ...
- PyQt5+python3+pycharm开发环境配置
1.下载PyQt https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.6/PyQt5-5.6-gpl-Py3.5-Qt5.6.0-x32- ...
- 深入了解css3新特性
深入了解css3新特性:http://www.ibm.com/developerworks/cn/web/1202_zhouxiang_css3/
- python pandas 数据处理
pandas是基于numpy包扩展而来的,因而numpy的绝大多数方法在pandas中都能适用. pandas中我们要熟悉两个数据结构Series 和DataFrame Series是类似于数组的对象 ...
- MinGW32 +QT4.8.6+QT Creator+CMAKE的安装
参考网址: http://www.360doc.com/content/15/0813/09/7256015_491331699.shtml http://m.fx114.net/qa-196-213 ...
- 12c windows auto installl
--config for oralce_envset ORACLE_HOME=c:\app\oracle\product\12.1.0\dbhome_1set ORACLE_SID=testuatse ...
- Maven中央(或国内)仓库地址
maven官方 http://repo1.maven.org/maven2/ 或 http://repo2.maven.org/maven2/ (延迟低一些) osc 本家 http://maven ...