从今天开始学习JavaScript啦!
每日一记
前置知识
1.概念
这种编程语言写出来的程序被称为脚本。它们可以被直接写在网页的 HTML 中,在页面加载的时候自动执行。
脚本被以纯文本的形式提供和执行。它们不需要特殊的准备或编译即可运行。
2.JavaScript 引擎
首先,引擎(如果是浏览器,则引擎被嵌入在其中)读取(“解析”)脚本。
然后,引擎将脚本转化(“编译”)为机器语言。
然后,机器代码快速地执行。
3.作用
JavaScript 可以做与网页操作、用户交互和 Web 服务器相关的所有事情。
4.局限性
(1)网页中的 JavaScript 没有直接访问操作系统的功能。
(2)不同的标签页/窗口之间通常互不通信(“同源策略”)为了解决“同源策略”问题,两个标签页必须<都>包含一些处理这个问题的特定的 JavaScript 代码,并均允许数据交换。
(3)可以轻松地通过互联网与当前页面所在的服务器进行通信
正文
1.markup(标签)
type 特性:<script type=…> #已不需要
language 特性:<script language=…> #已不需要
2.外部脚本
将大量的 JavaScript 代码放入一个单独的文件。
脚本文件可以通过 src 特性(attribute)添加到 HTML 文件中。
使用独立文件的好处是浏览器会下载它,然后将它保存到浏览器的 缓存 中。
之后,其他页面想要相同的脚本就会从缓存中获取,而不是下载它。所以文件实际上只会下载一次。
这可以节省流量,并使得页面(加载)更快。
<script src="路径"></script> #要附加多个脚本,请使用多个标签
注意:如果设置了 src 特性,script 标签内容将会被忽略。
3.语句
在代码中编写任意数量的语句。语句之间可以使用;进行分割。 #可以放在一行或多行
当存在换行符时,在大多数情况下可以省略分号(自动分号插入)
4.注释
单行注释以两个正斜杠字符 // 开始。 #Ctrl+/快捷键
/* 多行注释*/
5.现代模式("use strict")
"use strict" 出现在脚本的最顶部,保证旧的功能能够使用
变量
1.概念
let message; #创建(声明或者定义)一个名称为“message”的变量
message = 'Hello'; #为变量添加一些数据
2.变量命名限制
首字符必须非数字
变量名称必须仅包含字母、数字、符号 $ 和 _
可以将变量定义和赋值合并成一行,也可以在一行中声明多个变量
对于确定不变的变量尽量使用大写
3.常数变量
声明一个常数(不变)变量,可以使用const而非let
数据类型
1.Number 类型
包括整数,浮点数和特殊数值(Infinity、-Infinity 和 NaN)
NaN代表计算错误。它是不正确或者未定义的数学操作所得到的结果,任何对NaN的进一步数学运算都会返回NaN,除了NaN**0=1
2.BigInt 类型
BigInt用于表示任意长度的整数。可以通过将n附加到整数字段的末尾来创建BigInt值。
3.String 类型
字符串必须被括在引号里(单双引号无区别,反引号是功能扩展,允许我们通过将变量和表达式包装在${…}中)
在反引号内${…}的表达式会被计算
4.Boolean 类型(逻辑类型)
仅包含两个值true和false
布尔值也可作为比较的结果
5.null 值
null值不属于上述任何一种类型,它构成了一个独立的类型,只包含 null 值
null仅仅是一个代表“无”、“空”或“值未知”的特殊值
6.undefined 值
特殊值undefined和null一样自成类型,undefined的含义是未被赋值
如果一个变量已被声明,但未被赋值,那么它的值就是 undefined
通常使用null将一个“空”或者“未知”的值写入变量,而undefined则保留作为未进行初始化的事物的默认初始值
7.Object 类型
object 用于储存数据集合和更复杂的实体
8.Symbol 类型
symbol 类型用于创建对象的唯一标识符
9..typeof 运算符
typeof 运算符以字符串的形式返回数据类型
注:typeof null的结果为"object"。这是官方承认的typeof的错误
typeof alert的结果是"function",因为alert在JavaScript语言中是一个函数,
函数隶属于object类型。但是typeof会对函数区分对待,并返回"function"
typeof(x)与typeof x相同
交互
alert
alert("Hello");
显示模态窗(modal) ,直到他们处理完窗口
prompt
result = prompt(title, [default]);
显示一个带有文本消息的模态窗口,还有input框和确定/取消按钮
title是显示给用户的文本,default是指定input框的初始值。 (中括号可去)
不提供default的话,浏览器会把undefined插入到prompt
prompt将返回用户在input框内输入的文本,如果用户取消了输入,则返回null
显示一个带有文本消息的模态窗口,还有input框和确定/取消按钮
confirm
result = confirm(question);
显示一个带有question以及确定和取消两个按钮的模态窗口。
点击确定返回true,点击取消返回false。
限制性:
模态窗口的确切位置由浏览器决定。通常在页面中心。
窗口的确切外观也取决于浏览器。我们不能修改它。
类型转换
字符串转换 x = String(x);
数字型转换 Number(x)x
字符串变成NaN(存在字符)或0(除换行符\n制表符\t外为空)
undefined变成NaN
null变成0
true 和 false变成1 and 0
布尔型转换 Boolean(x)
直观上为“空”的值(如 0、空字符串、null、undefined 和 NaN)将变为 false。
其他值变成 true。
非空的字符串总是 true(PHP等语言视 “0” 为 false而js不是)
自动转换:
运算符和函数会自动将赋予它们的值转换为正确的类型
alert会自动将任何值都转换为字符串以进行显示;算术函数和表达式中会自动进行number类型转换
基础运算符,数学运算
详见知识点
1.加号 + 用于求和
应用于字符串,连接各个字符串
只要任意一个运算元是字符串,那么另一个运算元也将被转化为字符串
2.数字转化,一元运算符 +
+ 应用于单个值,对数字没有任何作用。但是如果运算元不是数字,加号 + 则会将其转化为数字
效果和 Number(…) 相同,但是更加简短
3.运算符优先级
一元运算符优先级高于二元运算符
4.其他运算方式
链式赋值 a = b = c = 2;
原地修改 n += 5;
自增/自减counter++;相当于counter = counter + 1;
自增/自减只能应用于变量,应用于数值(比如 5++)会报错
运算符 ++ 和 – 可以置于变量前,也可以置于变量后。
++和–放在前面使用的是自增后的值,放在后面是自增前的值
位运算符及位操作符:按位与 ( & )按位或 ( | )按位异或 ( ^ )按位非 ( ~ )左移 ( << )右移 ( >> )无符号右移 ( >>> )
逗号运算符丢弃逗号前的结果,保留逗号后的
值的比较
一,比较结果为 Boolean 类型
所有比较运算符均返回布尔值
二,字符串比较
按字符(母)逐个进行比较的
三,不同类型间的比较
先将其转化为数字再判定大小(true 会被转化为 1、false 转化为 0)
四,严格相等
严格相等运算符 === 在进行比较时不会做任何的类型转换(属于不同的数据类型就立刻返回 false)
五,比较 null 和 undefined
严格相等 === 比较二者时false
非严格相等 == 比较二者时true
数学式或其他比较方法 < > <= >= 时null 被转化为 0,undefined 被转化为 NaN
六,其它
null 会被转化为0
undefined 在比较中被转换为了 NaN,而 NaN 是一个特殊的数值型值,它与任何值进行比较都会返回 false
undefined 只与 null 相等
总结问题
比较运算符始终返回布尔值。
字符串的比较,会按照“词典”顺序逐字符地比较大小。
当对不同类型的值进行比较时,它们会先被转化为数字(不包括严格相等检查)再进行比较。
在非严格相等 == 下,null 和 undefined 相等且各自不等于任何其他的值。
在使用 > 或 < 进行比较时,需要注意变量可能为 null/undefined 的情况。
比较好的方法是单独检查变量是否等于 null/undefined。
对于取值可能是 null/undefined 的变量,请按需要分别检查它的取值情况。
除了严格相等 === 外,其他但凡是有 undefined/null 参与的比较,我们都需要格外小心。
除非你非常清楚自己在做什么,否则永远不要使用 >= > < <= 去比较一个可能为 null/undefined 的变量。