JS标识符的命名规则,即变量的命名规则:

  • 标识符只能由字母、数字、下划线和‘$’组成
  • 数字不可以作为标识符的首字符

对象属性的命名规则

  • 通过[]操作符为对象添加属性时,属性名称可以是任何字符串(包括只包含空格的字符串和空字符串);
  • 通过.操作符为对象添加属性时,属性名称必须是合法的标识符名称;
  • 如果属性名包含非法的标识符字符,则只能采用obj[“propertyName”]的形式;
  • 如果属性名是合法的标识符,读取时即可以采用obj.propertyName,也可以采用obj[“propertyName”]的形式;

举例:

var obj = new Object();
obj["home addr"]="Tianjin";
obj["!@#$%"]="!@#$%";
obj[""]="empty string";
obj[" "]="string contains only space";

在控制台中查看如下:

纯数字属性名的特殊性

  纯数字属性名的使用比较特殊,可以通过对象字面量和obj[number]的形式为对象添加纯数字属性,解释器会自动将数字转换为数字字符串。

  定义实例:

var obj = {1:"first"}
obj[2]="second";
obj["3"]="third";

  以上三种为对象添加纯数字属性的方法是等效的,控制台查看如下:

  读取的方式有两种:

  • obj[number]
  • obj["number"]

  需要注意,采用obj.number的方式读取纯数字属性名称时浏览器会报错,如下

布尔属性名的特殊性

布尔属性名和纯数字属性名有着相似的行为,如下

采用[]操作符读取对象属性时,js解释器执行的动作

采用obj[propertyName]的形式读取或创建对象属性时,解释器首先会检查propertyName是值类型字面量还是用户定义的变量,如果propertyName是值类型的字面量,则解释器自动将其转换为字符串后再读取或创建属性,如obj[1],obj[true]会被转换成obj["1"]、obj["true"].

如果propertyName是变量名称(或者是表达式),则解释器会读取变量内容(或对表达式求值),如果变量的值是字符串,则直接读取属性,如果是其他类型的数据,则转换为字符串后再读取属性。举例如下:

定义对象:

定义变量:

读取属性:

更特殊的,为obj添加undefined属性:

使用未初始化的变量c读取obj的undefined属性:

由于c没有初始化,所以将c转换为字符串的结果是“undefined”,而obj存在“undefined”属性。

JS对象属性命名规则的更多相关文章

  1. js对象属性 通过点(.) 和 方括号([]) 的不同之处

    //    js对象属性 通过点(.) 和 方括号([]) 的不同之处 //    1.点操作符: 静态的.右侧必须是一个以属性名称命名的简单标识符.属性名用一个标识符来表示.标识符必须直接出现再js ...

  2. COM结构化存储中存储对象或者流对象的命名规则

      COM结构化存储中存储对象或者流对象的命名规则

  3. js对象属性方法大总结(收集)

    数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...

  4. js对象属性名以数字开头如何获取、js属性名以数字开头、missing ) after argument list

    js对象中属性名以数字开头引发的报错 :missing ) after argument list var ChineseDistricts = { : { : '北京市', : '天津市', : ' ...

  5. js对象属性方法大总结

    数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...

  6. js对象转换为json格式时,js对象属性中有值为null和undefined注意事项

    当属性值为null时: 当属性值为undefined时: 只有当属性值为未定义时, js对象转换成json格式时会忽略该属性.

  7. js 对象属性遍历

    function 对象属性遍历(){ var obj = {x:1,y:2,c:3};for (var name in obj){ alert ( obj[name] )} } function 数组 ...

  8. js对象属性—枚举、检查、删除

    前言 我们经常需要操作对象的属性.这里记录ES5中操作对象属性的API和它们之间的差异. 枚举属性 for/in遍历对象中的所有可枚举属性(包括自有属性和继承属性) var obj = {name:& ...

  9. JS 对象属性名排序

    问题,对象属性名排序,如: var data = { A:[], D:[], B:{} } 调整为=> var data = { A:[], B:[], D:{} } 方法一: for,in,把 ...

随机推荐

  1. hdu 3001 Travelling(状态压缩 三进制)

    Travelling Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. CQRS微服务架构模式

    ​什么是微服务? 这是维基百科里面的定义:“微服务是面向服务架构(SOA)架构风格的一种变体,它将应用程序构建为一系列松散耦合的服务.在微服务体系结构中,服务应该是细粒度的,协议应该是轻量级的.将应用 ...

  3. Tomcat降权启动

    对于任何降权的操作都是为了更好的保护自己的服务器免受危害,所以我们使用Tomcat也不了外,也需要进行降权操作.因为当 Tomcat以系统管理员身份或作为系统服务运行时,Java运行时取得了系统用户或 ...

  4. C# Post和Get请求

    Get请求: /// <summary> /// 调用ToxyzAPI /// </summary> /// <param name="requetid&quo ...

  5. 使用Docker安装Mysql

    最近使用阿里云服务器,学习一下Docker,今天学着使用Docker安装MySQL. 首先,从阿里云的Docker Hub 上pull一个MySQL的image. [centos@loovelj~]$ ...

  6. Hibernate框架学习之注解映射实体类

         前面的相关文章中,我们已经介绍了使用XML配置文件映射实体类及其各种类型的属性的相关知识.然而不论是时代的潮流还是臃肿繁杂的配置代码告诉我们,注解配置才是更人性化的设计,于是学习了基本的映射 ...

  7. windows下配置php + mysql环境

    一.php服务器环境:apache + php安装与配置 1.下载apache.(httpd.apache.com) apache官网只提供源码,编译文件会有跳转到别的网站的下载地址. 如需VC9或V ...

  8. [转载] 深入剖析 redis 主从复制

    转载自http://www.cnblogs.com/daoluanxiaozi/p/3724299.html 主从概述 redis 支持 master-slave(主从)模式,redis server ...

  9. ZedBoard开发板学习记录(一)之开发环境的搭建(Ubuntu16.04)以及运行HelloWorld程序的测试

    ZedBoard开发板由PL和PS两大部分组成, 对PS操作,一般有两个办法: (1).在Windows系统上面,使用SDK新建C Project SDK自带编译环境,编译后自动产生elf文件.使用U ...

  10. Java8 方式解决Stream流转其他数组

    Java8 方式解决Stream流转其他数组 一. 题记:原来的List转数组用的是如下方式: example private static void listToStringArray(List l ...