《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 安装并启动 ...
随机推荐
- dev gridcontrol把event事件转换成命令
可以通过继承gridcontrol的形式来实现 定义DataGridDoubleClickCommand依赖属性 class MyGridControl : GridControl { ...
- python爬虫---python3.5---eclipse
解析中文会出现\xbe\c8\90\hd........ 这个和你的编码选择有关.如果是解析成html,则需 fout = open('output.html', 'w',encoding='utf- ...
- 【原生js】原生js的省市区三级联动
html: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- Openjudge-NOI题库-旅行-数论
题目描述 Description 转眼毕业了,曾经朝夕相处的同学们不得不都各奔东西,大家都去了不同的城市开始新的生活.在各自城市居住了一段时间后,他们都感到了一些厌倦,想去看看其他人的生活究竟如何,于 ...
- 提示找不到xml配置文件
ClassPathXmlApplicationContext("applicationContext.xml")默认文件夹是resouerces,所以要把xml文件放在这个下面.
- js便利json 数组的方法
这篇文章主要介绍了JQuery遍历json数组的3种方法,本文分别给出了使用each.for遍历json的方法,其中for又分成两种形式,需要的朋友可以参考下 $(function () { var ...
- Python学习笔记——基础篇【第七周】———FTP作业(面向对象编程进阶 & Socket编程基础)
FTP作业 本节内容: 面向对象高级语法部分 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 参考:http://www.cnblogs.com/wupeiqi/ ...
- c# 操作xml之xmlReader
xmlReader的名称空间using System.Xml; xmlReader是通过流的方式来读取xml文件的内容 <?xml version="1.0" encodin ...
- JDBC:四步完成MySQL数据库的连接
->首先,将MySQL的jar包引入 ->然后创建一个.properties的文件(例:connection.properties),在该文件中写入如下代码: jdbc.driver.cl ...
- GoogleCodeJam
2016年没有参赛,在师兄的介绍下,试了一下简单的一题,需要注意的是读写数据的形式还有具体代码. 2016资格赛 A题 Problem Bleatrix Trotter the sheep has d ...