《JavaScript模式》一书中提到的一些坑
1. 应当用数组字面量来创建数组,而不是用new Array()
//反模式
var a = new Array('itsy', 'bitsy', 'spider'); //用字面量
var a = ['itsy', 'bitsy', 'spider'];
console.log(typeof a); //object
console.log(a.constructor === Array); //true
说明:对象的constructor属性引用了该对象的构造函数
console.log((function(){}).constructor); //function Function() { [native code] }
console.log({}.constructor); //function Object() { [native code] }
console.log('string'.constructor); //function String() { [native code] }
var i=0;
console.log(i.constructor); //function Number() { [native code] }
var a = true;
console.log(a.constructor); //function Boolean() { [native code] }
避免new Array()的另一个理由是用于避免构造函数中可能产生的陷阱——当向Array()构造函数传递单个数字时,它并不会成为第一个数组元素的值,而是设定了数组的长度。
var a = [3];
console.log(a.length); //
console.log(a[0]); // var b = new Array(3);
console.log(b.length); //
console.log(b[0]); //undefined
当向new Array()中传递一个浮点数时,会直接报错
var a = [3.14];
console.log(a[0]); //3.14 var b = new Array(3.14); //报错:test.html:377 Uncaught RangeError: Invalid array length
传入多个数则可以:
var b = new Array(1,2);
console.log(b[0]); //
总之,看起来使用数组字面量更靠谱一点
2. JSON和字面量的区别
在JSON中,属性名称需要包装在引号里
而在对象字面量中,仅当属性名不是有效表示符时才需要引号 比如属性名字符之间有空格 {"first name": "Dave"}
此外,在JSON字符串中,不能使用函数或正则表达式字面量。
3. 使用JSON
不推荐使用eval()对任意JSON字符串进行求值,推荐使用JSON.parse()方法进行解析。
var js = '{"mykey" : "my value"}';
//反模式
var data = eval('(' + js + ')');
//应该使用
var data = JSON.parse(js);
console.log(data.mykey); //my value
9
//jQuery中:
var data = jQuery.parseJSON(js);
相对的方法----序列化为JSON字符串:JSON.stringify(data)
《JavaScript模式》一书中提到的一些坑的更多相关文章
- 关于javascript模式一书中var white = new Array(256).join(“ ”)
直接进入正题 var white = new Array(256).join(" ") 运行后,我们会发现white.length的长度是255,这个是为什么呢?书上没有给出解答, ...
- 《JavaScript模式》读书笔记
简介 在软件开发过程中,模式是指一个通用问题的解决方案.一个模式不仅仅是一个可以用来复制粘贴的代码解决方案,更多地是提供了一个更好的实践经验.有用的抽象化表示和解决一类问题的模板. 对象有两大类: 本 ...
- Javascript模式(第一章简介)------读书笔记
一:模式 模式是一个通用问题的解决方案,可以提供一个更好的实践经验.有用的抽象化表示和解决一类问题的模板. 本书主要讨论如下三种类型的模式 1 设计模式:可复用面向对象软件的基础,包括singleto ...
- 精读JavaScript模式(四),数组,对象与函数的几种创建方式
一.前言 放了个元旦,休息了三天,加上春运抢票一系列事情的冲击,我感觉我的心已经飞了.确实应该收收心,之前计划的学习任务也严重脱节了:我恨不得打死我自己. 在上篇博客中,笔记记录到了关于构造函数方面的 ...
- 精读JavaScript模式(八),JS类式继承
一.前言 这篇开始主要介绍代码复用模式(原书中的第六章),任何一位有理想的开发者都不愿意将同样的逻辑代码重写多次,复用也是提升自己开发能力中重要的一环,所以本篇也将从“继承”开始,聊聊开发中的各种代码 ...
- Egret入门学习日记 --- 第三篇 (书中 3.4 内容)
第三篇 (书中 3.4 内容) 今天还是要把昨天项目运行后,EXML文件里的界面没有出现的问题解决了才行. 去了群里,没人回.去了官网看文档,看不懂. 不过倒是看到了一个好东西: 还挺便宜啊,一个月要 ...
- Egret入门学习日记 --- 第五篇(书中 3.5节 内容)
第五篇(书中 3.5节 内容) 今天得把昨天的问题解决了才行. 去了Q群,碰到一位大大,他给我解惑了.Thanks♪(・ω・)ノ 这是我之前按照书上写的方式写的,并没有效果. 然后大大给我解答了: 后 ...
- 《高性能javascript》一书要点和延伸(上)
前些天收到了HTML5中国送来的<高性能javascript>一书,便打算将其做为假期消遣,顺便也写篇文章记录下书中一些要点. 个人觉得本书很值得中低级别的前端朋友阅读,会有很多意想不到的 ...
- 【推荐】JavaScript的那些书
又好久没写东西了,写上一篇的时候还以为接下来的工作会轻松一些,结果未从我所愿呐,又是一阵忙碌.而这段时间穿插着做了很多12年淘宝校园招聘的前端面试,很多同学都有问到,学校里没有前端的课程,那如何学习J ...
随机推荐
- 【SQL模板】四.插入/更新 列模板TSQL
---Name: 插入/更新 列模板.sql ---Purpose: 用于更新 数据库中 列 的脚本模板 ---Author: xx ---Time: 2015-12-18 10:26:06 ---R ...
- windows常用的cmd网络命令
一.ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP ...
- java.text.SimpleDateFormat的使用
SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格式化 (date -> text).语法分析 (text -> date)和标准化. Simpl ...
- pip安装包
默认的在安装文件的Lib\site-packages\路径下面 cmd窗口 cd切换路径:C:\Users\admin\AppData\Local\Programs\Python\Python36\S ...
- 想要打动HR的心,UX设计师求职信究竟应该怎么写?
在努力准备申请一份UX设计师职位时,你最烦心和担忧的事哪一个环节?是写一份UX设计师简历?回答面试官的问题?还是在一遍遍的煎熬中等待一个面试电话?是的,这些都是不轻松的事儿,但还有一个同样糟心的事,那 ...
- HttpClient的几个实现类
DefaultHttpClient最基本的HttpClient实现 org.apache.http.impl.client.DefaultHttpClient占用内存23字节 第一次初始化的时候需要2 ...
- RocketMQ的客户端连接数调查
RocketMQ版本:3.4.6 ==问题现象== RocketMQ集群的某个topic,在一部分节点上消费有“断层”,这部分数据一致没办法消费. ==调查过程== 一顿操作猛如虎的调查之后发现, 该 ...
- mybatis 和 mybatis-spring
一. 1. 实体bean package com.mybatisBean; public class User { private Integer id; private String name; ...
- python读取文件,python读取的1变成\ufeff1
'\ufeff1' movies={} fm=open(self.path+'/movie.txt',encoding='utf-8') w2=open('./data/1.txt','a') for ...
- 将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取
Sheet1$是Excel默认的第一个表名,如果改动:select * from [Sheet1$]"将查询失败,因此应根据选择自动获取excel表名: OpenFileDialog ofd ...