PHP、MySQL 和 JavaScript 学习指南第六版(十一)
原文:
zh.annas-archive.org/md5/4aa97a1e8046991cb9f8d5f0f234943f译者:飞龙
附录 A. 章节问题的解决方案
第一章答案
网页服务器(如 Apache)、服务器端脚本语言(PHP)、数据库(MySQL)和客户端脚本语言(JavaScript)。
超文本标记语言:网页本身,包括文本和标记标签。
就像几乎所有基于 SQL 的数据库引擎一样,MySQL 接受 结构化查询语言(SQL)命令。SQL 是每个用户(包括 PHP 程序)与 MySQL 通信的方式。
PHP 运行在服务器端,而 JavaScript 运行在客户端。PHP 可以与数据库通信以存储和检索数据,但不能快速和动态地改变用户的网页。JavaScript 则具有相反的优点和缺点。
层叠样式表:应用于 HTML 文档中元素的样式和布局规则。
HTML5 中可能最有趣的新元素是 <audio>、<video> 和 <canvas>,尽管还有许多其他元素,如 <article>、<summary>、<footer> 等等。
这些技术有些由接受 Bug 报告并像任何软件公司一样修复错误的公司控制。但开源软件还依赖于社区,因此你的 Bug 报告可能会被懂得代码的任何用户处理。也许将来你自己会修复开源工具中的 Bug。
它允许开发人员专注于构建网站或 Web 应用程序的核心功能,将平台(无论是 Linux、macOS、Windows、iOS 还是 Android)、屏幕尺寸或运行的浏览器的外观和运行任务交给框架来完成。
第二章答案
WAMP 代表 Windows, Apache, MySQL, 和 PHP。MAMP 中的 M 代表 Mac 而不是 Windows,而 LAMP 中的 L 代表 Linux。它们都指的是一套用于托管动态网页的完整解决方案。
127.0.0.1 和 http://localhost 都是指向本地计算机的方式。当 WAMP 或 MAMP 正确配置时,你可以在浏览器地址栏中输入任一地址来调用本地服务器上的默认页面。
FTP 是 文件传输协议 的缩写。FTP 程序用于在客户端和服务器之间传输文件。
需要将文件通过 FTP 传输到远程服务器才能更新它们,如果在一个会话中多次执行此操作,则可能显著增加开发时间。
专用的程序编辑器很聪明,可以在你运行代码之前就高亮显示问题。
第三章答案
使用的标签是 <?php...?>。虽然可以缩短为 <?...?>,但不推荐这样做。
你可以使用 // 进行单行注释或使用 / * ... * / 跨越多行。
所有 PHP 语句必须以分号 (;) 结束。
除了常量外,所有 PHP 变量必须以 $ 开头。
变量保存一个可以是字符串、数字或其他数据的值。
$variable = 1是一个赋值语句,而$variable == 1中的==是一个比较运算符。使用$variable = 1设置$variable的值。使用$variable == 1在程序后面找出$variable是否等于1。如果您错误地使用了$variable = 1而您本意是做一个比较,它会做两件您可能不想做的事情:将$variable设置为1并始终返回true值,不管其之前的值是什么。
在 PHP 中,连字符保留用于减法、递减和否定运算符。如果变量名中也允许使用连字符,则像$current-user这样的构造将更难以解释,并且无论如何都会使程序产生歧义。
是的,变量名是区分大小写的。$This_Variable与$this_variable不相同。
不能在变量名中使用空格,因为这会混淆 PHP 解析器。而是尝试使用_(下划线)。
要将一个变量类型转换为另一个,引用它,PHP 将自动为您转换它。
++$j和$j++之间没有区别,除非测试$j的值,将其赋值给另一个变量或作为参数传递给函数。在这种情况下,++$j在执行测试或其他操作之前递增$j,而$j++执行操作然后递增$j。
通常情况下,&&和and操作符是可以互换的,除非优先级很重要,在这种情况下,&&的优先级较高,而and的优先级较低。
您可以在引号内使用多行或使用<<<_END..._END;构造来创建多行echo或赋值。在后一种情况下,关闭标记必须单独位于一行上,前后都不能有任何内容。
由于定义了常量,因此不能重新定义常量,直到程序终止为止,它们将保留其值。
您可以使用\'或\"来转义单引号或双引号。
echo和print命令相似,它们都是构造,但print行为类似于 PHP 函数,并接受单个参数,而echo可以接受多个参数。
函数的目的是将代码的离散部分分离到它们自己的自包含部分,并通过单个函数名称引用它们。
通过将变量声明为global,可以使其在 PHP 程序的所有部分中可访问。
如果在函数内生成数据,可以通过返回值或修改全局变量将数据传递给程序的其余部分。
当你将字符串与数字结合时,结果是另一个字符串。
第四章答案
在 PHP 中,TRUE表示值1,FALSE表示NULL,可以认为是“nothing”,并输出为空字符串。
表达式的最简单形式是字面量(如数字和字符串)和变量,它们仅仅评估为它们自己。
一元、二元和三元运算符的区别在于它们所需的操作数数量(分别为一、二和三个)。
强制自定义操作符优先级的最佳方法是在希望赋予高优先级的子表达式周围放置括号。
运算符结合性指的是处理方向(从左到右或从右到左)。
当您希望绕过 PHP 的自动操作数类型更改(也称为类型转换)时,可以使用身份运算符。
三种条件语句类型是if、switch和?:运算符。
要跳过循环的当前迭代并继续下一个迭代,使用continue语句。
使用for语句的循环比while循环更强大,因为它们支持两个额外的参数来控制循环处理。
大多数条件表达式在if和while语句中是字面量(或布尔值),因此在评估为TRUE时触发执行。数值表达式在评估为非零值时触发执行。字符串表达式在评估为非空字符串时触发执行。NULL值评估为 false,因此不会触发执行。
第五章答案
使用函数可以避免多次复制或重写类似代码段的需要,通过将语句集合组合在一起,可以通过简单名称调用它们。
默认情况下,函数可以返回单个值。但通过利用数组、引用和全局变量,它可以返回任意数量的值。
当您通过名称使用变量,例如将其值分配给另一个变量或将其值传递给函数时,其值会被复制。当副本更改时,原始值不会更改。但如果引用变量,则仅使用指向其值的指针(或引用),因此一个值可以被多个名称引用。更改引用的值将同时更改原始值。
作用域是指程序中可以访问变量的部分。例如,全局作用域的变量可以被 PHP 程序的所有部分访问。
要在另一个文件中包含一个文件,可以使用include或require指令或它们的安全变体include_once和require_once。
函数是一组通过名称引用的语句,可以接收和返回值。对象可以包含零个或多个函数(然后称为方法)以及变量(称为属性),所有这些组合在一个单元中。
要在 PHP 中创建一个新对象,可以像这样使用new关键字:
$object = new Class;
要创建子类,使用extends关键字,语法如下:
class Subclass extends Parentclass ...
若要在创建对象时初始化对象,可以通过在类中创建构造方法__construct并在其中放置初始化代码来调用初始化代码段。
在类中显式声明属性不是必需的,因为它们在首次使用时将隐式声明。但这被认为是良好的编程实践,因为它有助于代码的可读性和调试,并且对于可能需要维护您代码的其他人来说尤为有用。
第六章答案
数值数组可以使用数字或数值变量进行数字索引。关联数组使用字母数字标识符索引元素。
array 关键字的主要好处是它使您能够一次向数组分配多个值,而不必重复数组名称。
each 函数和 foreach...as 循环结构都返回数组中的元素;两者都从开头开始并递增指针,以确保下一个元素在下一次调用或迭代中返回,并且当达到数组末尾时都返回 FALSE。不同之处在于 each 函数返回单个元素,因此通常包装在循环中。foreach...as 结构已经是一个循环,重复执行直到数组耗尽或您明确中断循环。
要创建多维数组,您需要为父数组的元素分配额外的数组。
您可以使用 count 函数计算数组中元素的数量。
explode 函数的目的是从字符串中提取由标识符分隔的部分,例如从句子中用空格分隔的单词。
要将 PHP 内部数组的指针重置回到第一个元素,调用 reset 函数。
第七章答案
用于显示浮点数的转换说明符是 %f。
要从输入字符串 "Happy Birthday" 输出字符串 "**Happy",您可以使用类似这样的 printf 语句:
printf("%'*7.5s", "Happy Birthday");
要将 printf 的输出发送到变量而不是浏览器,您可以使用 sprintf。
要创建 2025 年 5 月 2 日上午 7:11 的 Unix 时间戳,可以使用以下命令:
$timestamp = mktime(7, 11, 0, 5, 2, 2025);
您可以使用 fopen 的 w+ 文件访问模式以写入和读取模式打开文件,并将文件截断,并将文件指针置于开头。
删除文件 file.txt 的 PHP 命令如下:
unlink('file.txt');
PHP 函数 file_get_contents 用于一次性读取整个文件。如果提供了 URL,它也会从互联网上读取文件。
PHP 超级全局关联数组 $_FILES 包含关于上传文件的详细信息。
PHP 的 exec 函数允许运行系统命令。
在 HTML5 中,您可以使用 XHTML 样式的标签(例如 <hr />)或标准的 HTML4 样式(例如 <hr>)。完全取决于您或您公司的编码风格。
第八章答案
MySQL 中的分号用于分隔或结束命令。如果您忘记输入它,MySQL 将发出提示,并等待您输入。
要查看可用的数据库,输入SHOW databases。要查看正在使用的数据库中的表,输入SHOW tables。(这些命令不区分大小写。)
要创建这个新用户,可以像这样使用GRANT命令:
GRANT PRIVILEGES ON newdatabase.* TO 'newuser'@'localhost'
IDENTIFIED BY 'newpassword';
要查看表的结构,输入DESCRIBE tablename。
MySQL 索引的目的是通过向表中的一个或多个关键列添加一些元数据,从而大幅度减少数据库访问时间,可以快速搜索表内的行。
FULLTEXT索引使自然语言查询能够在FULLTEXT列中的任何位置找到关键字,类似于使用搜索引擎。
停用词 是一种非常常见的词,因此认为不值得包含在FULLTEXT索引或在搜索中使用。但是,在由双引号限定的较大字符串中时,它将包含在搜索中。
SELECT DISTINCT 实质上只影响显示,选择一行并消除所有重复。GROUP BY 不会消除行,而是将具有相同值的所有行组合在一起。因此,GROUP BY 对执行诸如COUNT之类的操作非常有用。SELECT DISTINCT 对此目的没有用处。
要仅返回包含表classics中author列的某处有Langhorne单词的行,请使用以下命令:
SELECT * FROM classics WHERE author LIKE "%Langhorne%";
当您将两个表连接在一起时,它们必须共享至少一个公共列,例如 ID 号码或者像classics和customers表中的isbn列。
第九章答案
关系 这个术语指的是两个具有某种关联的数据之间的连接,比如一本书和它的作者,或一本书和购买这本书的客户。像 MySQL 这样的关系数据库专门用于存储和检索这样的关系。
去重数据和优化表的过程称为规范化。
第一范式的三条规则如下:
-
不应该有包含相同类型数据的重复列。
-
所有列应包含单个值。
-
应该有一个主键来唯一标识每一行。
要满足第二范式,应将数据在多行之间重复的列移动到它们自己的表中。
在一对多关系中,来自“一”侧表的主键必须作为一个单独的列(外键)添加到“多”侧表中。
要创建具有多对多关系的数据库,您需要创建一个包含来自其他两个表的键的中介表。然后,其他表可以通过第三个表彼此引用。
要启动一个 MySQL 事务,请使用BEGIN或START TRANSACTION命令。要终止事务并取消所有操作,请使用ROLLBACK命令。要终止事务并提交所有操作,请使用COMMIT命令。
要详细查看查询的工作方式,可以使用 EXPLAIN 命令。
要将数据库 publications 备份到名为 publications.sql 的文件中,可以使用如下命令:
mysqldump -u *user* -p*password* publications > publications.sql
第十章:答案
当声明类属性时,PHP 8 允许您在函数调用中提供命名参数,允许您根据它们的参数名而不是参数顺序向函数传递输入数据。
空安全操作符是 ?->,如果遇到 null 值,它将立即返回 null 而不会引发错误。
在 PHP 8 中,match 表达式可以替代 switch 语句,它比 switch 更好,因为它提供类型安全的比较,支持返回值,不需要 break 语句来退出,并且支持多个匹配值。
在 PHP 8 中,您现在可以使用 str_contains 函数来确定一个字符串是否存在于另一个字符串中。
在 PHP 8 中进行浮点数除法计算时,避免除以零错误的最佳方法是使用 fdiv 函数,该函数在除以零时返回 INF、-INF。
一个 polyfill 是代码,它提供你的代码期望原生支持的功能,并且当原生支持不可用时,你可以将它包含在程序中,以确保你的代码可以继续正确运行。
在 PHP 8 中,要查看由 preg_ 函数调用生成的最近错误的英文解释,可以调用 preg_last_error_msg 函数。
默认情况下,MySQL 8 现在使用 InnoDB 作为其事务存储引擎。
在 MySQL 8 中,要更改列名,可以使用 RENAME COLUMN 命令,而不是使用 ALTER TABLE ... CHANGE TABLE 命令。
MySQL 8 中的默认认证插件是 caching_sha2_password。
第十一章:答案
要使用 PDO 连接到 MySQL 数据库,请调用 pdo 方法,并传递属性、用户名、密码和选项。成功时将返回连接对象。
要使用 PDO 向 MySQL 提交查询,请确保首先创建了一个连接到数据库的连接对象,然后调用其 query 方法,并传递查询字符串。
PDO::FETCH_NUM 风格的 fetch 方法可用于将一行作为按列编号索引的数组返回。
您可以通过将值 null 分配给用于连接数据库的 PDO 对象来手动关闭 PDO 连接。
向具有 AUTO_INCREMENT 列的表添加行时,应将值 null 传递给该列。
要转义字符串中的特殊字符,您可以调用 PDO 连接对象的 quote 方法,并将需要转义的字符串作为参数传递。当然,出于安全考虑,使用预处理语句会更好。
在访问数据库时确保数据库安全的最佳方法是使用占位符。
第十二章:答案
用于将提交的表单数据传递给 PHP 的关联数组是$_GET(用于 GET 方法)和$_POST(用于 POST 方法)。
文本框和文本区域的区别在于,尽管它们都接受表单输入的文本,但文本框是单行的,而文本区域可以是多行并包括自动换行。
要在 Web 表单中提供三个互斥的选择,应使用单选按钮,因为复选框允许多选。
可以使用带有方括号的数组名称(如choices[])而不是常规字段名称来提交 Web 表单中的一组选择。然后,每个值将被放入数组中,其长度将是提交的元素数量。
要将表单字段提交而用户看不到,使用带有属性type="hidden"的隐藏字段。
可以使用<label>和</label>标签封装表单元素及其支持的文本或图形,使整个单元可通过鼠标单击选择。
要将 HTML 转换为可以显示但不会被浏览器解释为 HTML 的格式,使用 PHP 的htmlentities函数。
可以使用autocomplete属性帮助用户填写可能已在其他地方提交的数据,该属性提示用户可能的值。
要确保表单不会因缺少数据而提交,可以对必填输入应用required属性。
第十三章答案
Cookie 应在网页的 HTML 之前传输,因为它们作为头部的一部分发送。
要在 Web 浏览器中存储 Cookie,使用setcookie函数。
要销毁 Cookie,使用setcookie重新发行它,但将其过期日期设置为过去。
使用 HTTP 身份验证,用户名和密码存储在$_SERVER['PHP_AUTH_USER']和$_SERVER['PHP_AUTH_PW']中。
password_hash函数是一种强大的安全措施,因为它是一种单向函数,将字符串转换为一长串十六进制数字,无法反转,因此只要用户需要强密码(例如至少八个字符,包括随机放置的数字和标点符号),就非常难以破解。
当字符串经过盐处理时,在hash转换之前会向其添加仅由 Web 服务器(或者如果自己进行盐化,则由程序员)知道的额外字符。这通常应该由 PHP 来处理,以确保具有相同密码的用户不具有相同的哈希,并防止使用预先计算的哈希表。
PHP 会话是一组对当前用户唯一的变量,随后的请求中传递,以便用户在访问不同页面时仍然可用。
要启动 PHP 会话,使用session_start函数。
会话劫持是指黑客某种方式发现现有的会话 ID 并尝试接管它。
会话固定是指攻击者试图使用错误的会话 ID 强制用户登录,从而危及连接的安全性。
第十四章答案
要包含 JavaScript 代码,您可以使用<script>和</script>标签。
默认情况下,JavaScript 代码将输出到其所在的文档部分。如果在头部,则输出到头部;如果在主体中,则输出到主体。
您可以通过复制粘贴或更常见的方式,将其他文件中的 JavaScript 代码包含在您的文档中,即将其作为<script src='*filename.js*'>标签的一部分。
PHP 中使用的echo和print命令的 JavaScript 等效函数(或方法)是document.write。
要在 JavaScript 中创建注释,可以用//作为单行注释的前缀,或用/*和*/括起来作为多行注释。
JavaScript 字符串连接运算符是+符号。
在 JavaScript 函数内部,您可以通过在首次赋值时加上var关键字来定义具有局部作用域的变量。
要在所有主流浏览器中显示与thislink标识的链接分配的 URL,您可以使用以下任意一条命令:
document.write(document.getElementById('thislink').href)
document.write(thislink.href)
在浏览器历史数组中切换到上一页的命令如下:
history.back()
history.go(-1)
要用以下命令替换当前文档为O’Reilly 网站的主页,您可以使用以下命令:
document.location.href = 'http://oreilly.com'
第十五章答案
PHP 和 JavaScript 之间布尔值的最显着区别在于 PHP 识别关键字TRUE、true、FALSE和false,而 JavaScript 仅支持true和false。此外,在 PHP 中,TRUE的值为1,FALSE为NULL;而在 JavaScript 中,它们分别表示为可以返回为字符串值的true和false。
与 PHP 不同,JavaScript 变量名不使用特定字符(如$)。JavaScript 变量名可以以及包含大写和小写字母以及下划线;名称还可以包括数字,但不能作为第一个字符。
一元、二元和三元运算符的区别在于每个运算符需要的操作数数量(分别为一、二和三个)。
强制自定义操作符优先级的最佳方法是用括号将表达式中需要先计算的部分括起来。
当您希望绕过 JavaScript 的自动操作数类型转换时,您可以使用身份运算符。
表达式的最简单形式是字面值(如数字和字符串)和变量,它们简单地评估为它们自己。
三种条件语句类型分别是if、switch和?:运算符。
大多数if和while语句中的条件表达式是字面值或布尔值,因此在评估为true时触发执行。数值表达式在评估为非零值时触发执行。字符串表达式在评估为非空字符串时触发执行。NULL值评估为false,因此不会触发执行。
使用for语句的循环比while循环更强大,因为它们支持两个额外的参数来控制循环处理。
with语句接受一个对象作为其参数。使用它,您只需一次指定对象;然后,在with块中的每个语句中,该对象被假定存在。
第十六章答案
JavaScript 中的函数和变量名区分大小写。变量Count、count和COUNT都是不同的。
要编写一个接受和处理无限数量参数的函数,通过arguments数组访问参数,该数组是所有函数的成员。
从函数返回多个值的一种方法是将它们全部放入数组中并返回该数组。
在定义类时,使用this关键字引用当前对象。
类的方法不一定要在类定义内部定义。如果一个方法在构造函数外部定义,则必须在类定义内将方法名分配给this对象。
使用new关键字创建新对象。
通过使用prototype关键字创建一个单一实例,并通过引用传递给类中的所有对象,可以使一个属性或方法对类中的所有对象都可用,而无需在对象内复制它。
要创建多维数组,将子数组放入父数组中。
创建关联数组的语法是在花括号内使用*key* : *value*,如下所示:
assocarray =
{
"forename" : "Paul",
"surname" : "McCartney",
"group" : "The Beatles"
}
对一个数字数组进行降序排序的语句如下所示:
numbers.sort(function(a, b){ return b – a })
第十七章答案
可以通过将 JavaScript 的onsubmit属性添加到<form>标签以在提交前对表单进行验证。确保如果要提交表单,则您的函数返回true,否则返回false。
要在 JavaScript 中使用正则表达式匹配字符串,请使用test方法。
用于匹配非单词字符的正则表达式可以是/[^\w]/、/[\W]/、/^\w``/、/\W/、/[^a-zA-Z0-9_]/等。
一个匹配fox或fix任意一个单词的正则表达式可以是/f[oi]x/。
匹配任意单词后跟任何非单词字符的正则表达式可以是/\w+\W/g。
一个使用正则表达式测试字符串The quick brown fox中是否存在fox的 JavaScript 函数可以如下所示:
document.write(/fox/.test("The quick brown fox"))
一个使用正则表达式在The cow jumps over the moon中替换所有the为my的 PHP 函数可以如下所示:
$s=preg_replace("/the/i", "my", "The cow jumps over the moon");
用于预填充表单字段值的 HTML 属性是 value,放置在 <input> 标签中,格式为 value="value"。
第十八章:答案
用于在服务器和 JavaScript 客户端之间进行异步通信必须创建一个 XMLHttpRequest 对象。
可以通过对象的 readyState 属性值为 4 来判断异步调用是否完成。
当异步调用成功完成时,对象的 status 属性将具有值 200。
XMLHttpRequest 对象的 responseText 属性包含成功异步调用返回的值。
XMLHttpRequest 对象的 responseXML 属性包含从成功异步调用返回的 XML 创建的 DOM 树。
要指定回调函数处理异步响应,将函数名称分配给 XMLHttpRequest 对象的 onreadystatechange 属性。还可以使用未命名的内联函数。
要启动异步请求,调用 XMLHTTPRequest 对象的 send 方法。
异步 GET 和 POST 请求的主要区别在于,GET 请求将数据附加到 URL 上,而不是将其作为 send 方法的参数传递,而 POST 请求将数据作为 send 方法的参数传递,并且需要首先发送正确的表单头。
第十九章:答案
要将一个样式表导入到另一个样式表中,使用 @import 指令,如下所示:
@import url('styles.css');
要在文档中导入样式表,可以使用 HTML <link> 标签:
<link rel='stylesheet' href='styles.css'>
要直接将样式嵌入元素中,请使用 style 属性,如下所示:
<div style='color:blue;'>
CSS 中 ID 和类的区别在于,ID 只应用于单个元素,而类可以应用于多个元素。
在 CSS 声明中,ID 名称以 # 字符为前缀(例如 #myid),类名以 . 字符为前缀(例如 .myclass)。
在 CSS 中,分号 (;) 用作声明之间的分隔符。
要向样式表添加注释,请将其放在 /* 和 */ 的开头和结尾注释标记之间。
在 CSS 中,可以使用 * 通用选择器匹配任何元素。
要在 CSS 中选择一组不同的元素和/或元素类型,可以在每个元素、ID 或类之间加上逗号。
在具有相同优先级的一对 CSS 声明中,要使其中一个具有更高的优先级,可以将 !important 声明附加到其中,如下所示:
p { color:#ff0000 !important; }
第二十章:答案
CSS3 运算符 ^=、$= 和 *= 分别匹配字符串的开头、结尾或任意部分。
用于指定背景图像大小的属性是 background-size,如下所示:
background-size:800px 600px;
可以使用 border-radius 属性指定边框的半径:
border-radius:20px;
要在多列中流动文本,请使用 column-count、column-gap 和 column-rule 属性(或其特定于浏览器的变体),如下所示:
column-count:3;
column-gap :1em;
column-rule :1px solid black;
你可以使用hsl、hsla、rgb和rgba这四个函数指定 CSS 颜色。例如:
color:rgba(0%,60%,40%,0.4);
要在文本下创建一个灰色阴影,对角线向右下方偏移 5 像素,模糊度为 3 像素,使用以下声明:
text-shadow:5px 5px 3px #888;
要使用省略号指示文本被截断,可以使用以下声明:
text-overflow:ellipsis;
要在网页中包含 Google 网页字体(如 Lobster),首先从http://fonts.google.com中选择它,然后将提供的<link>标签复制到 HTML 文档的<head>中。它看起来类似于这样:
<link href='http://fonts.googleapis.com/css?family=Lobster'
rel='stylesheet'>
然后,你可以在 CSS 声明中引用字体,例如:
h1 { font-family:'Lobster', arial, serif; }
你可以使用以下 CSS 声明来将对象旋转 90 度:
transform:rotate(90deg);
要为对象设置过渡效果,使其在更改任何属性时立即以线性方式在半秒内过渡,使用以下声明:
transition:all .5s linear;
第二十一章答案
O函数根据其 ID 返回对象,S函数返回对象的style属性,C函数返回访问给定类的所有对象的数组。
你可以使用setAttribute函数修改对象的 CSS 属性,例如:
myobject.setAttribute('font-size', '16pt')
通常也可以直接修改属性(在必要时稍作修改属性名称),如:
myobject.fontSize = '16pt'
提供浏览器窗口可用宽度和高度的属性是window.innerHeight和window.innerWidth。
要在鼠标经过和离开对象时触发某些操作,需分别绑定到onmouseover和onmouseout事件。
要创建一个新元素,可以使用以下代码:
elem = document.createElement('span')
要将新元素添加到 DOM 中,可以使用以下代码:
document.body.appendChild(elem)
要使元素不可见,将其visibility属性设置为hidden(将其设置为visible以再次显示)。要将元素的尺寸折叠为零,将其display属性设置为none(将此属性设置为block是将其恢复为原始尺寸的一种方法)。
要在未来某个时间设置单个事件,请调用setTimeout函数,传递要执行的代码或函数名称以及以毫秒为单位的时间延迟。
要设置定期重复事件,请使用setInterval函数,传递要执行的代码或函数名称以及重复之间的时间延迟(以毫秒为单位)。
要释放网页中元素的位置以便移动它,请将其position属性设置为relative、absolute或fixed。要恢复它到原来的位置,请将属性设置为static。
要实现每秒 50 帧的动画速率,应将中断之间的延迟设置为 20 毫秒。要计算此值,请将 1,000 毫秒除以所需的帧速率。
第二十二章答案
用作创建 jQuery 对象的工厂方法通常使用符号$。或者,你可以使用方法名jQuery。
要链接到 Google CDN 上的 jQuery 压缩版本 3.2.1,可以使用如下 HTML 代码:
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/
jquery.min.js'></script>
jQuery 的$工厂方法接受 CSS 选择器,以构建匹配元素的 jQuery 对象。
要获取 CSS 属性值,请使用css方法,只需提供属性名称。要设置属性值,请向方法提供属性名称和值。
要将方法附加到元素elem的点击事件上,使其慢慢隐藏,你可以使用以下代码:
$('#elem').click(function() { $(this).hide('slow') } )
要能够对元素进行动画,必须将其position属性值设为fixed、relative或absolute。
你可以通过使用句号将它们链接在一起,一次运行方法(或者如果动画是顺序的)如下所示:
$('#elem').css('color', 'blue').css('background',
'yellow').slideUp('slow')
要从 jQuery 选择对象中检索元素节点对象,可以使用方括号进行索引,如下所示:
$('#elem')[0]
或者使用get方法,如下所示:
$('#elem').get(0)
要显示 ID 为news的兄弟元素之前的相邻元素为粗体,可以使用此语句:
$('#news').prev().css('font-weight', 'bold')
您可以使用$.get方法使 jQuery 异步进行 GET 请求,如下所示:
$.get('http://server.com/ajax.php?do=this', function(data) {
alert('The server said: ' + data) } )
第二十三章答案
使用 CDN 传送文件意味着您不必依赖自己(或客户的)带宽,这可以节省金钱。另外,一旦浏览器下载了文件,同一版本可以从缓存中重新加载,从而加快用户体验。缺点是,如果用户的浏览器在此时未连接到互联网,您的网页或 Web 应用可能无法在本地运行。
要定义 jQuery Mobile 内容页,应将其包含在具有data-role属性为page的<div>元素中。
jQuery 页面的三个主要部分是其标题、内容和页脚。为了表示这些部分,您将它们放在分别具有data-role属性分配值header、content和footer的<div>元素内。这三个元素必须是在问题 2 中讨论的父级<div>的子元素。
要在单个 HTML 文档中放置多个 jQuery Mobile 页面,可以包含具有data-role属性为page的多个父级<div>元素,每个元素包含问题 3 中讨论的三个子<div>。要在这些页面之间建立链接,应为每个元素分配一个唯一的id(例如id="news"),然后可以在 HTML 文档的任何位置使用锚点引用它,如<a href="#news">。
要阻止网页异步加载,可以将锚点或表单的data-ajax属性值设为false,将其rel属性值设为external,或者为其target属性提供一个值。
要将锚点的页面转换设置为翻转,给其data-transition属性赋值flip(或者你可以使用其他支持的过渡效果值,例如data-transition="pop")。
通过将其 data-rel 属性值设为 dialog,可以加载页面以对话框形式显示。
要将锚点链接显示为按钮,请将其 data-role 属性值设为 button。
要使 jQuery Mobile 元素显示为内联元素,请将其 data-inline 属性值设为 true。
要将图标添加到按钮上,请将已知的 jQuery Mobile 图标名称作为其 data-icon 属性的值,例如,data-icon="gear"。
第二十四章答案
你可以通过下载文件并从自己的 Web 服务器提供或使用 unpkg.com 等 CDN,在 Web 页面中引入 React 脚本。然后在 HTML 文档中使用 script 标签加载这些脚本。
要在 React JavaScript 中嵌入 XML,首先需要加载 Babel 扩展,可以从 CDN 或本地加载,使用 script 标签。
JSX JavaScript <script> 部分的代码需要在其上添加 type="text/babel" 才能运行。
你可以将 React 扩展到你的代码中,可以作为一个类使用 class Name extends React.Component,也可以通过函数的 return 语句返回要渲染的代码。在这两种情况下,必须调用 ReactDOM.render 来启动渲染。
在 React 中,纯代码不会改变其输入,而改变输入的代码被认为是不纯的。
React 使用 props 对象及其属性来跟踪状态。
要在 JSX 代码中嵌入表达式,将其放在花括号内,如: Hello {props.name}。
一旦类已经构造完成,只能使用 setState 函数来更改值的状态。
要在构造函数内部使用 this 关键字引用 props,必须首先调用 super 方法并传递 props,如下所示: super(props)。
你可以在 JSX 中使用 && 运算符创建条件语句。对于 IF...THEN...ELSE 语句,可以使用三元 ?: 运算符。
第二十五章答案
在 Web 页面中绘制图形的新 HTML5 元素是画布元素,使用 <canvas> 标签创建。
你需要使用 JavaScript 访问许多新的 HTML5 功能,比如画布和地理位置。
要在 Web 页面中嵌入音频或视频,请使用 <audio> 或 <video> 标签。
在 HTML5 中,本地存储提供比 Cookie 更大量的本地用户空间访问。
在 HTML5 中,你可以设置 Web Worker 来执行后台任务。这些 Worker 简单地是 JavaScript 代码的一部分。
第二十六章答案
要在 HTML 中创建画布元素,请使用 <canvas> 标签并指定一个 JavaScript 可以访问的 ID,例如:
<canvas id='mycanvas'>
要使 JavaScript 能够访问画布元素,请确保元素已赋予 ID,如 mycanvas,然后使用 document.getElementById 函数(或者伴随示例归档的 OSC.js 文件中的 O 函数)返回元素的对象。最后,在对象上调用 getContext 以获取画布的 2D 上下文,例如:
canvas = document.getElementById('mycanvas')
context = canvas.getContext('2d')
要开始绘制路径,请在上下文上调用 beginPath 方法。创建路径后,通过在上下文上调用 closePath 方法来关闭它,例如:
context.beginPath()
// Path creation commands go here
context.closePath()
您可以使用 toDataURL 方法从画布中提取数据,然后将其分配给图像对象的 src 属性,例如:
image.src = canvas.toDataURL()
要创建具有多于两种颜色的渐变填充(径向或线性),请将所有所需的颜色指定为已创建的渐变对象分配的停止颜色,并为每个颜色分配一个起始点作为完整渐变的百分比值(介于 0 和 1 之间),例如:
gradient.addColorStop(0, 'green')
gradient.addColorStop(0.3, 'red')
gradient.addColorStop(0,79, 'orange')
gradient.addColorStop(1, 'brown')
要调整绘制线条的宽度,请将值分配给上下文的 lineWidth 属性,例如:
context.lineWidth = 5
要确保将来的绘制仅发生在特定区域内,请创建路径,然后调用 clip 方法。
一个带有两个虚构吸引子的复杂曲线被称为 贝塞尔曲线。要创建一个,调用 bezierCurveTo 方法,提供两对 x 和 y 坐标作为吸引子,然后是曲线的终点的另一对坐标。然后从当前绘制位置创建到目标的曲线。
getImageData 方法返回一个数组,其中包含指定区域的像素数据,每个像素的数据依次包含红色、绿色、蓝色和 alpha 像素值,因此每个像素返回四个数据项。
transform 方法接受六个参数(或参数),它们依次是水平缩放、水平倾斜、垂直倾斜、垂直缩放、水平平移和垂直平移。因此,适用于缩放的参数是列表中的第一个和第四个。
第二十七章:答案
要在 HTML5 文档中插入音频和视频,请使用 <audio> 和 <video> 标签。
要确保压缩的有损音频在所有平台上具有最大的音频播放性,您应该在 AAC 和 MP3 音频格式之间选择(或提供两者)。
要播放和暂停 HTML5 媒体播放,您可以调用 <audio> 或 <video> 元素的 play 和 pause 方法。
FLAC 是一种压缩的(但不如 MP3 或 AAC 那样压缩)音频格式,但没有任何数据损失。在提供无损音频内容时,它将节省存储空间和带宽。
要确保视频在所有平台上具有最大的播放性,您应该选择(或提供两者)MP4 和 WEBM 视频格式之间。
第二十八章:答案
要从 web 浏览器请求地理位置数据,请调用以下方法,并传递两个处理数据访问或拒绝的函数名称:
navigator.geolocation.getCurrentPosition(granted, denied)
要确定浏览器是否支持本地存储,可以测试localStorage对象的typeof属性,就像这样:
if (typeof localStorage == 'undefined')
// Local storage is not available}
要清除当前域的所有本地存储数据,可以调用localStorage.clear方法。
Web Worker 与主程序通信的最简单方式是使用postMessage方法发送信息。程序会附加到 Web Worker 的onmessage事件以接收信息。
要停止 Web Worker 的运行,请调用worker对象的terminate方法,就像这样:worker.terminate()。
在处理这些操作的事件中,可以通过调用事件对象的preventDefault方法来阻止默认的拖放操作。
为了使跨文档消息传递更安全,发布消息时应始终提供域标识符,就像这样:
postMessage(message, 'http://mydomain.com')
并且在接收它们时检查该标识符,就像这样:
if (event.origin) != 'http://mydomain.com') // Disallow
你还可以加密或隐藏通信内容,以防止注入或窃听。
第二十九章答案
这个问题的答案完全由你决定。如果你喜欢这本书,请告诉你的朋友并在在线书店留下评论。如果你有任何问题、评论、建议或附加说明,请访问这本书的O'Reilly 目录页面并在那里留言,谢谢你的阅读!