资源
JS基础知识
- MCMAScript是JavaScript的标准
- 完整的JavaScript包括,MCMAScript,DOM,BOM
- 解释性语言,函数式编程,单线程,面向对象
- 编写位置:
- 写在网页中的
<script></script>
中 - 外部的js文件中,然后使用
<script src=""></script>
引入 - 标签的指定属性中,button的onclick属性,a的href属性href=“javascript:…;”
- 输出方式:alert(),console.log(),document.write()
- 注释:多行注释/**/,单行注释//
- js严格区分大小写
- js中多个空格和换行会被忽略
- js中每句应该以封号结尾,但有自动添加封号的机制,不写也行,但还是推荐写
字面量、变量和常量
- 字面量可以直接使用,1,2,3,‘hello’,true,null这些
- 变量:新的:let 变量名=值,旧的:var 变量名=值;主要区别是let生成的变量有块作用域,var是函数作用域
- 变量存的是存储值的内存地址,若两个变量的存储值相同,则两个变量指向相同的内存地址
- 变量没有类型,typeof检查的是变量指向的值的类型,typeof返回的是字符串
- 常量:使用const声明常量,只能赋值一次,通常全大写
标识符和数据类型
- 标识符:可以自主命名的内容,变量名,函数名,类名等
- 表示符命名规则:
- 只能含字母、数字、下划线和$,且不能以数字开头
- 不能是js中的关键字和保留字,具体有哪个可以查
- 不建议使用内置的函数或类名作为变量名
- 命名规范:见前端代码规范
- 数据类型由原始值和对象组成
- 原始值有七种,下面介绍
- 数值(Number)
- 整数和浮点数都是number类型
- 大小并不是无限大,大于等于10^16后显示近似值,再大显示科学计数法,
- 再大就是Infinity,表示无穷,特殊数值
- 15位的十进制数都可以精确表示
- NaN也是一个特殊的数值,表示非法的数值
- 进制数开头:二进制0b,八进制0o,十进制无,十六进制0x
- 大整数(BigInt)
- 表示比较大的整数
- 以n结尾,范围无限制,比如let a=99999999999999999999999999999999n
- 无法与number类型的直接运算
- 字符串(String)
- 使用单引号h或双引号b表示字符串,推荐使用单引号
- 转义字符\反斜杠,回车上面的,用于在字符串中输出特殊的字符,\n,\t这些
- 反斜杠还可以用于代码的中的换行,比如一行写的太才的时候的时候,但不推荐使用,部分浏览器不支持
- 模板字符串,使用反引号包裹内容 ,一是可以用于代码中换行,但用的不多,最重要的二是可以使用${}嵌入变量,例:
let name=xxx ;let he=`${name}`
- 布尔值(Boolean),值有 true 或者false
- 空值(Null)
- 用来表示空对象,值只有null,
- 使用typeof 返回类型时返回的是’object’,无法检查空值
- 未定义(Undefined)
- 当声明一个变量未赋值时,值为undefined
- 使用typeof 返回类型时返回的是’undefined’\
- 与空值的区别是,未定义我们不会主动使用,我们使用null表示空值
- 符号(Symbol)
- 用来创建唯一标识,调用Symbol()函数,
- 向用户隐藏某些值?只有拿到Symbol才能看?
- 7个原始值是不可变类型,一旦创建了就不能修改了,指的是值,变量可以通过指向新的值来改变内容。
显示类型转换
- 将其他类型转为:字符串、值和布尔值
- 转换为字符串
- 使用toString()方法,比如
let a=10;a=a.toString()
,toString()是根据a的值创建一个字符串,对a无影响,需要赋值才改变;注意null和undefined无toString(),所以调用时会报错 - 使用String()函数,比如
let a=10;a=String(a)
,此函数对有toString()的直接调用,没有的null和undefined,直接转换为字符串
- 转换为数值
- 使用Number(),针对所有类型,比如
let a='10';a=Number(a)
- 转换情况,字符串为合法字符串时转换为对应数字,不是合法数字时转换为NaN,空串和纯空格串会转换为0
- 布尔值,true -> 1, false->0
- null->0,undefined->NaN
- 针对字符串的转换方法(不是字符串时会先转成字符串),parseInt(),从左向右读取字符串,直到读取到所有的整数,‘120px’->120,‘a120’->NaN,‘123.5’->123,所以有时会用来取整
- parseFloat(),‘123…2s’->123,‘a123.3.2s’->NaN,‘123.3.2s’->123.3
- 转换为布尔值,
- 使用Boolean()函数转换为布尔值
- 所有表示空和错误的值会转换为false,有:0,NaN,null,undefined,false和空串,空格串会转换为true
运算符
- 算术运算符:±*/,除法不是整除,除以0返回Infinity;**表示幂运算;%取模;
- JS是弱类型语言,当运算时会通过自动的类型转换来完成运算,比如10-‘5’=5
- 算数运算,除了字符串的加法,其他会转换为数字后再运算
- 字符串的加法,任意值和字符串加法运算时,会先将其他值转换为字符串,然后再拼串,依次可以完成字符串的隐式转换,加空串’'操作完成隐式转换,原理是调String()函数,但更方便
- 赋值运算符:=,变量在=左边是变量,在=右边是值;??=表示空赋值,a??=100,只有在a为null和undefined时才会赋值
- 一元正负,±还可以表示正负,对非数字类型进行正负运算时,会将其转换为数值再运算,一种隐式转换
- 自增自减,++a返回新值后+1,a++返回旧值后+1
- 逻辑,非!,与&&,或||;
- 对非布尔取反会先转为布尔后取反,所以可以取两次反来隐式转换类型;
- &&实质是找false,在找到false后会直接返回false,不会看第二个值,即不会执行符号后面的语句,对非布尔与操作会先转为布尔后运算,然后返回原值,第一个为false则返回false,第一个为true则返回第二这值
- &&实质是找true,在找到true后会直接返回true,不会看第二个值,即不会执行符号后面的语句,对非布尔与操作会先转为布尔后运算,然后返回原值,第一个为true则返回true,第一个为false则返回第二这值
- 逻辑运算符,|(按位或操作,OR,找1),^(按位异或操作,XOR,同0异1),&(按位与操作,NOT,找0),~(按位非操作,NOT,01取反)
- 关系运算符,对非数值进行关系运算时,会先转换为数值后比较;两端都是字符串时会逐位的比较字符的Unicode编码,所以对字符串格式的数字进行比较时需要先转换类型;没有python中5<num<10的写法,会出错。
- 相等运算符,
= =
相等与= = =
全等,!=
不相等与! = =
不全等
- ==比较两个不同的类型时,会将其转换为相同的类型,通常是数值,然后再比较
- ===不进行类型转换,类型不同是返回false
- null和undefined进行==比较时返回true,进行===时返回false
- NaN不和任何值相等,包括自己
!=
不相等与! = =
不全等与= =
相等与= = =
全等相反
- 条件运算符 条件表达式?表达式1:表达式2
- 运算符优先级,查表吧,常见的 a++=a–> !>一元±=–a=++a>**>*/%>±>关系>&&>||