习题
内容协商
HTTP 可以做的事情之一就是内容协商。 Accept
请求头用于告诉服务器,客户端想要获得什么类型的文档。 许多服务器忽略这个协议头,但是当一个服务器知道各种编码资源的方式时,它可以查看这个协议头,并发送客户端首选的格式。
URL eloquentjavascript.net/author
配置为响应明文,HTML 或 JSON,具体取决于客户端要求的内容。 这些格式由标准化的媒体类型"text/plain"
,"text/html"
和"application/json"
标识。
发送请求来获取此资源的所有三种格式。 使用传递给fetch
的options
对象中的headers
属性,将名为Accept
的协议头设置为所需的媒体类型。
最后,请尝试请求媒体类型"application/rainbows+unicorns"
,并查看产生的状态码。
// Your code here.
JavaScript 工作台
构建一个接口,允许用户输入和运行一段 JavaScript 代码。
在<textarea>
字段旁边放置一个按钮,当按下该按钮时,使用我们在第 10 章中看到的Function
构造器,将文本包装到一个函数中并调用它。 将函数的返回值或其引发的任何错误转换为字符串,并将其显示在文本字段下。
<textarea id="code">return "hi";</textarea>
<button id="button">Run</button>
<pre id="output"></pre>
<script>
// Your code here.
</script>
Conway 的生命游戏
Conway 的生命游戏是一个简单的在网格中模拟生命的游戏,每一个细胞都可以生存或灭亡。对于每一代(回合),都要遵循以下规则:
任何细胞,周围有少于两个或多于三个的活着的邻居,都会死亡。
任意细胞,拥有两个或三个的活着的邻居,可以生存到下一代。
任何死去的细胞,周围有三个活着的邻居,可以再次复活。
任意一个相连的细胞都可以称为邻居,包括对角相连。
注意这些规则要立刻应用于整个网格,而不是一次一个网格。这表明邻居的数目由开始的一代决定,并且邻居在每一代时发生的变化不应该影响给定细胞新的状态。
使用任何一个你认为合适的数据结构来实现这个游戏。使用Math.random
来随机的生成开始状态。将其展示为一个选择框组成的网格和一个生成下一代的按钮。当用户选中或取消选中一个选择框时,其变化应该影响下一代的计算。
<div id="grid"></div>
<button id="next">Next generation</button>
<script>
// Your code here.
</script>