《JS权威指南学习总结--6.4检测属性》

时间:2022-12-15 17:23:53

内容要点:

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检测属性》的更多相关文章

  1. 《JS权威指南学习总结--8.7 函数属性、方法和构造函数》

    内容要点:   在JS程序中,函数是值.对函数执行typeof运算会返回字符串 "function",但是函数是JS中特殊的对象.因为函数也是对象,它们也可以拥有属性和方法,就像普 ...

  2. 《JS权威指南学习总结--6.5枚举属性》

    内容要点: 一.for/in循环 1.for/in循环可以在循环体中遍历对象中所有可枚举的属性(包括自有属性和继承的属性),把属性名称赋值给循环变量.对象继承的内置方法不可枚举,但在代码中给对象添加的 ...

  3. 《JS权威指南学习总结--6.3删除属性》

    内容要点: 一.delete运算符可以删除对象的属性.它的操作数应当是一个属性访问表达式.让人感到意外的是,delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性: delete book ...

  4. 《JS权威指南学习总结》

    JS权威指南学习总结:http://www.cnblogs.com/ahthw/category/652668.html

  5. 《JS权威指南学习总结--开始简介》

    本书共分成了四大部分: 1.JS语言核心 2.客户端JS 3.JS核心参考 4.客户端JS核心参考 其中 <JS权威指南学习总结--1.1语法核心> 是:第一部分JS语言核心 各章节重点 ...

  6. 《JS权威指南学习总结--1&period;1语言核心》

    1.1语言核心 --本节主要介绍<js权威指南>基础部分各章讲解内容和一些简单的示例 本小节内容: 一.第二章讲解js注释.分号和Unicode,第三章主要讲解js变量和赋值 简单示例: ...

  7. Node&period;js权威指南学习记录

    学习nodeJS权威指南的学习记录 导航: 1.console模块 2.全局变量 3.Buffer对象 4.事件对象 5.网络请求 6.文件操作对象 一. COMMON.js的学习.(commonJS ...

  8. js权威指南学习笔记(四)对象

    1.创建对象 (1).通过对象直接量的方式创建 说明:对象直接量是由若干名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来. 如:       5 5   ...

  9. 《JS权威指南学习总结--9&period;5 类和类型》

    内容要点: 介绍了三种用以检测任意对象的类的技术,instanceof运算符.constructor属性,以及构造函数的名字. 但每种技术都不甚完美,本节总结了鸭式辩型,这种编程哲学更加关注对象可以完 ...

随机推荐

  1. poj 1008&colon;Maya Calendar(模拟题,玛雅日历转换)

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64795   Accepted: 19978 D ...

  2. Build类

    在开发中 我们有时候会需要获取当前手机的系统版本来进行判断,或者需要获取一些当前手机的硬件信息. android.os.Build类中.包括了这样的一些信息.我们可以直接调用 而不需要添加任何的权限和 ...

  3. SQL数据库语句练习题目

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  4. Oracle多实例的配置方法

    SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME /dbhome_2) (PROGRAM ...

  5. winform 制作圆形图片框

    public partial class CirclePictureBox : PictureBox { public CirclePictureBox() { Circle = true; Init ...

  6. ABP mysql

    SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator ...

  7. 【转载】 unity 塔防游戏

    原文地址: Part1的地址:http://www.cnblogs.com/lcxBlog/p/6075984.html Part2的地址:http://www.cnblogs.com/lcxBlog ...

  8. 牛客练习赛 23 C 托米的位运算

    链接:https://www.nowcoder.com/acm/contest/156/C来源:牛客网 托米完成了1317的上一个任务,十分高兴,可是考验还没有结束 说话间1317给了托米 n 个自然 ...

  9. scrapy shell 用法(慢慢更新&period;&period;&period;)

    scrapy shell 命令 1.scrapy shell url #url指你所需要爬的网址 2.有些网址数据的爬取需要user-agent,scrapy shell中可以直接添加头文件, 第①种 ...

  10. DLL编写中extern &OpenCurlyDoubleQuote;C”和&lowbar;&lowbar;stdcall的作用

    动态链接库的使用有两种方式,一种是显式调用.一种是隐式调用. (1)       显式调用:使用LoadLibrary载入动态链接库.使用GetProcAddress获取某函数地址. (2)      ...