《JavaScript 高级程序设计》
第 20 章 JSON
JSON 是 JavaScript 的一个严格的子集,利用了 JavaScript 中的一些模式来表示结构化数据。
JSON 是一种数据格式,JSON 并不从属于 JavaScript。而且,并不是只有 JavaScript 才使用 JSON,毕竟 JSON 只是一种数据格式。很多编程语言都有针对 JSON 的解析器和序列化器。
语法
JSON 的语法可以表示以下三种类型的值。
- 简单值:使用与 JavaScript 相同的语法,可以在 JSON 中表示字符串、数值、布尔值和 null。但JSON 不支持 JavaScript 中的特殊值 undefined。
- 对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
- 数组:数组也是一种复杂数据类型,表示的是一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型 ———— 简单值、对象或数组。
JSON 不支持变量、函数或对象实例,它就是一种表示结构化数据的格式,虽然与 JavaScript 中表示数据的某些语法相同,但它并不局限于 JavaScript 的范畴。
简单值
最简单的 JSON 数据形式就是简单值。例如,下面这个值是有效的 JSON 数据:
JavaScript 字符串与 JSON 字符串的最大区别在于,JSON 字符串必须使用双引号(单引号会导致语法)
对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| var person = { name : "Nicholas", age : 29 }
var person = { "name" : "Nicholas", "age" : 29 };
{ "name" : "Nicholas", "age" : 29 }
|
与 JavaScript 的对象字面量相比,JSON 对象有两个地方不一样。
- 没有声明变量(JSON 中没有变量的概念)。
- 没有末尾的分号(因为这不是 JavaScript 语句,所以不需要分号)。对象的属性必须加双引号,这在 JSON 中是必须的。
对象中嵌套对象:
1 2 3 4 5 6 7 8
| { "name" : "Nicholas", "age" : 29, "school" : { "name" : "Merrimack College", "location" : "North Andover, MA" } }
|
《JavaScript语言精粹》
页码3有资源误删
精华
分析 JavaScript
好的想法:函数、弱类型、动态对象和对象字面量表示法。
坏的想法:全局变量。
JSlint、ESLint
语法
注释
书中建议避免使用 /* */
注释,而用 // 注释代替。
例如:
对象
语句
JavaScript 可以通过条件语句(if 和 switch),循环语句(while、for 和 do)、强制跳转语句(break、return 和 throw)和函数调用来改变这个执行序列。
函数
继承
数组
正则表达式
方法
代码风格
优美的特性
附录
糟粕
鸡肋
JSLint
语法图
JSON
// 页码 26
《学习JavaScript数据结构与算法》(第3版)
《JavaScript 设计模式》
第一篇 面向对象编程
面向对象编程(Object-oriented programming,oop)是一种程序设计范型。它将对象作为程序的基本单元,将程序和数据封装其中,以提高程序的重用性、灵活性和扩展性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| function checkName(){ }
function checkEmail(){ }
function checkPassword(){ }
var checkName = function (){ }
var checkEmail = function (){ }
var checkPassword = function (){ }
var checkobject = { checkName: function(){ }, checkEmail: function(){ }, checkPassword: function(){ } }
var checkobject = function(){}; checkobject.checkName = function(){ } checkobject.checkEmail = function(){ }, checkobject.checkPassword = function(){ }
var checkobject = function (){ return { checkName: function(){ }, checkEmail: function(){ }, checkPassword: function(){ } } } var a = checkobject(); a.checkEmail()
var ckeckobject = function (){ this.checkName: function(){ }, this.checkEmail: function(){ }, this.checkPassword: function(){ } } var a = new ckeckobject(); a.checkEmail();
var checkobject = function (){} checkobject.prototype.checkName: function(){ } ckeckobject.prototype.checkEmail: function(){ } ckeckobject.prototype.checkPassword: function(){ }
var checkobject = function (){} checkobject.prototype={ checkName: function(){ }, checkEmail: function(){ }, checkPassword: function(){ } } var a = new checkobject(); a.checkName(); a.checkEmail(); a.checkPassword();
var checkobject = { checkName: function(){ return this; } checkEmail: function(){ return this; } checkPassword: function(){ return this; } } checkobject.checkName().checkEmail().checkPassword();
var checkobject = function (){} checkobject.prototype = { checkName: function(){ return this; }, checkEmail: function(){ return this; }, checkPassword: function(){ return this; } } var a = new checkobject() a.checkName.checkEmail().checkPassword();
|
prototype.js:最大的特点是对原生对象的扩展。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Function.prototype.addMethod = function (name,fn) { this[name] = fn; return this; }
var methods = new Function(); methods.addMethod('checkName', function(){
}); methods.addMethod('checkEmail', function(){
});
methods.checkName(); methods.checkEmail();
methods.addMethod('checkName', function(){ return this; }).addMethod('checkEmail', function(){ return this; });
methods.checkName().checkEmail();
Function.prototype.addMethod = function(name, fn){ this.prototype[name] = fn; } var Methods = function(){} Methods.addMethod('checkName',function(){ }).addMethod('checkEmail',function(){ })
var m = new Methods(); m.checkEmail()
|
面向对象编程就是将你的需求抽象成一个对象,然后针对这对象分析其特性(属性)与动作(方法)。这个对象我们称之为类。面向对象编程思想其中有一个特点就是封装。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| var Book = function(id,bookname,price) { this.id = id this.bookname = bookname this.price = price } Book.prototype.display = function(){ }
var book = new Book(10,'javascript设计模式',50); console.log(book.bookname)
|
相关资料
红宝书第四版精读训练营
红宝书第四版精读训练营代码库
学习JavaScript数据结构与算法(第3版)源码