前端进化笔记-JavaScript(二)
追逐梦想的道路上,遍布尸体。
因为作者学过其他类c语言,就不对大家都熟悉的内容进行赘述了。
语法
JavaScript区分大小写
标识符:变量,函数,属性,函数参数的名称
- 第一个字符必须是字母,下划线(_),美元符号($);
- 关键字、保留字、true、false和null不能用作标识符
作者在后续阅读的过程中,发现对各种名称不熟悉导致阅读不畅,所以在这里建议大家把一些名词和对应内容稍微记一下,如:标识符,操作符,关键字,属性,方法等
es5引入严格模式概念,这是一个让人拍案叫绝的改动,JavaScript繁多的表达形式和便捷性着实让人又爱又恨。代码为"use strict";
关键字:有一些特殊用途,如控制语句等,这里简单枚举几个例子帮助理解:return break if this while var
保留字:未来可能用作关键字的字符
变量
JavaScript中的变量声明很随意,无论什么变量都可以用var声明var message;
甚至可以不声明message = 100;
当然你别忘了分号都可以不打(当然这样说只是吐槽JavaScript的随意,而不是这样用)
var
var定义的变量会成为它所在函数的局部变量,该变量在退出时就会被销毁,在函数外部是无法访问到的。而不用var直接声明的变量是全局变量,调用一次函数后就可以被访问。
如果在全局作用域中使用,则会成为window对象的属性。
使用var声明的变量会自动提升到函数作用域顶部,所以特意讲变量声明放在访问前不是必须的
let
let声明的变量只存在于块作用域,即{}内部,在同一个作用域中一个变量名只能声明一次,而var则允许出现冗余声明。注意,分别使用let var定义同名变量也会报错。
用let在全局作用域使用,不会成为window对象的属性,但仍然是全局作用域声明的,要注意声明冗余。
let声明不会对变量进行提升
const
与let基本相同,但是其在声明时必须初始化变量,同时此变量不允许修改。但如果是对象,修改对象内部属性的值是允许的
数据类型
Undefined Null Boolean Number String Symbol Object
在数据类型之前,typeof操作符是用来确定变量数据类型的手段。大部分typeof对数据类型的返回值是其小写形式,但有一些是例外。
- object表示值为对象或null
- function表示值为函数
Undefined类型
未初始化的变量的值为undefined。值得注意的是,对于未声明的变量使用typeof操作符会得到返回值undefined,但这两个是有着本质区别的,未声明的变量也只能有typeof这一个操作符能够执行。
Null类型
null值逻辑上表示一个空对象指针,用来对对象初始化。它与undefined表面上是相等的if(null == undefined) //true
,但是我们完全没必要显式的将变量赋值为undefined,而null则有必要。
Boolean类型
- 两个字面值:true,false。true和True是不一样的,false同理。
- 使用Boolean( )转型函数可以将任何类型数据转化为布尔值
Number类型
八进制:0开头,且不能出现0-7以外的数字(严格模式下无效)
十六进制:0x开头,字母大小写意义相同
1.浮点值:
- 小数点没有数字会被转化为整数
- 科学计数法:
let floatNum = 3.12e7;//等于31200000
注意:
浮点数在算术计算中并不那么精确,0.1+0.2并不等于0.3,而是0.300 000 000 000 000 04。
if(a + b == 0.3)//false a=0.1 b=0.2
if(a*10 + b*10 == 3)//true 浮点型自动转化为整型 一种解决方法
2.数值转换
有三个将非数值转换为数值的函数:Number( ),parseInt( )和parseFloat( )。Number可以用于任何数据类型,后面两个用于字符串转换为数值。
String类型
- 字符串长度可以通过其length属性获取
- 字符串一旦确定不可以更改,虽然可以用[]获取
- 将值转换为字符串:
- toString( )方法,返回当前值的字符串等价物,传入的参数表示数值的进制。数值,布尔值,对象,字符串值都有这个方法。
- String( )转型函数,和toString方法类似,多了对null和undefined的处理
- +''也可以使值转换为字符串
模板字面量:跨行定义字符串。典型用法如下:
let page = `
<div>
<a href = "#">
<span>Jake</span>
</a>
</div>`;
这个方法在定义模板时十分有用
字符串插值
在${ }中使用JavaScript表达式进行插值,必须要在
中使用,所有插入的表达式都会使用toString( )强制转型为字符串。
模板字面量标签函数
let a = 6;
let b = 9;
function simpleTag(strings, aValExpression, bValExpression, sumExpression) {
console.log(strings); //表示表达式之间连接的字符(有首尾两个' ')
console.log(aValExpression);//下面是三个表达式
console.log(bValExpression);
console.log(sumExpression);
return 'foobar';
}
let untaggedResult = `${ a } + ${ b } = ${ a + b }`;
let taggedResult = simpleTag`${ a } + ${ b } = ${ a + b }`; // ["", " + ", " = ", ""]
console.log(untaggedResult); // "6 + 9 = 15"
console.log(taggedResult); // "foobar"
由于表达式的参数是可变的,所以可以使用剩余操作符。
function simpleTag(strings, ...expressions) { //n个表达式
console.log(strings);
for(const expression of expressions) {
console.log(expression);
}
return 'foobar';
}
let taggedResult = simpleTag`${ a } + ${ b } = ${ a + b }`;
Symbol类型
p47(偷懒ing)
操作符
用于操作数据值:数学操作符 位操作符 关系操作符 相等操作符。JavaScript中可用于所有的值,对于对象,通常会调用valueOf( ) ,toString( )方法来取得可以计算的值
指数操作符(**):
ES7新增,用法如下
console.log(3**2); //9
consokle.log(16**0.5); //4
let a = 4;
a **= 2; //16
相等操作符:
1.相等和不相等( == 和!= ):会进行强制类型转换,转换后再进行相等判断。
2.全等和不全等( === 和!== ):比较时不会进行类型转换,在不转换前提下相等就是全等。
语句
for-in语句:严格迭代语句,用于枚举属性(无序)。
for-of语句:用于遍历可迭代对象的元素。
区别如下:
let arr = [1,2,3,4,5,6,674];
for(let i of arr){//in返回下标,of返回下标对应值
console.log(i);
}
for(let i in arr){//in返回下标,of返回下标对应值
console.log(i);
}
标签语句(可能借鉴了汇编?):label: statement
在使用的时候,可以根据label值进行跳转,从而运行后面的语句。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~