概述
编程语言和标记性语言
编程语言:有强逻辑和行为
标记性语言:html和css,不是向计算机发出指令是被动的
算法表示方法
1、自然语言
2、伪代码
3、流程图
历史
发展阶段
JS起源、第一次浏览器大战、第二次浏览器大战、JS蓬勃发展
时间节点
1995年网景公司布兰登·艾奇花十天时间写了JavaScript
1997年提交给欧洲计算机制造商协会(ECMA),进行统一JavaScript
2005年Goole推出Ajax(异步无刷新技术)。
Google浏览器JavaScript的引擎是V8
2009年RyanDahl在V8引擎基础上发布了Node.js
Node.js
引包
const readline = require("readline-sync");
console.log("请输入...");
let i = readline.question(); // 接收用户输入的内容 ---- 不能是中文
console.log(i);
导入node包:npm install readline-sync
基本语法
1、区分大小写
2、单行注释// 、 多行注释/* */
3、语句以 " ;" 结尾
标识符
概念
指变量、数组、函数的名字。
命名规范
1、数字、字母、下划线、$
2、不能以纯数字或数字开头
3、严格区分大小写
4、见名知意
5、类名大写、【函数名/方法名一般是动词】
6、不能用到关键字和保留字(保留字就是下个版本可能成为关键字)
【保留字:long、super、short、debugger等】
命名方式
蛇形命名法【eg:login_id】
驼峰命名法【大驼峰:LoginId】【小驼峰:loginId】
变量
存储数据的容器,由于JS中变量是弱变量【js是动态语言】,所以可以存放任意类型的值
面试官:说说var、let、const之间的区别 | web前端面试 - 面试官系列 (vue3js.cn)
var ---- 少用
特性:支持重复声明,遗漏声明
特点:1、存在变量提升【只提升变量,不提升值】
2、不存在块级作用域
let(ES6) ----- 常用
1、声明普通变量
2、变量声明不赋值为undefined(未定义) 3、变量要初始化
4、不能重复声明{let a= 1; let a= 2},但可以重新赋值
5、可以同时申明多个变量
6、有块级作用域
7、变量声明前不能使用【暂时性死区】
const(ES6)
声明一个只读的常量,一旦声明,常量的值就不能改变
特性:对于简单之,不能再更改
对于复杂值,不改变引用前提下可以更改
const声明的时候必须赋值(必须初始化)
不能更改常量原始值,但可以更改常量对象的属性。
补充:let、const、var的区别
(1)let、const拥有块作用域由 { }包括,let和const具有块级作用域,var不存在块级作用域。块级作用域解决了ES5中的两个问题:
内层变量可能覆盖外层变量
用来计数的循环变量泄露为全局变量
(2)变量提升: var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否在会报错。
(3)给全局添加属性: 浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。
(4)重复声明: var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。const和let不允许重复声明变量。
(5)暂时性死区: 在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死期”。使用var声明的变量不存在暂时性死区。
(6)初始值设置: 在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。
(7)指针指向: let和const都是ES6新增的用于创建变量的语法。 let创建的变量是可以更改指针指向(可以重新赋值)。但const声明的变量是不允许改变指针的指向。
(8)const必须要做常量初始化(必须赋值)
区别 | var | let | const |
---|---|---|---|
是否有块级作用域 | × | ✔️ | ✔️ |
是否存在变量提升 | ✔️ | × | × |
是否添加全局属性 | ✔️ | × | × |
能否重复声明变量 | ✔️ | × | × |
是否存在暂时性死区 | × | ✔️ | ✔️ |
是否必须设置初始值 | × | × | ✔️ |
能否改变指针指向 | ✔️ | ✔️ | × |
数据类型
分为:基本数据类型和引用数据类型
基本数据类型 / 简单值
基本数据类型 | 说明 | 默认值 |
---|---|---|
undefined | 未定义的【var a;声明了变量a但是没有赋值,此时a=undefined】 | undefined |
null | 空【var a=null;声明了变量a为空值】 | null |
number | 数字型【包含整型值和浮点型值、最大值最小值,无穷大,非数;如:21,0.21】 | 0 |
string | 字符串 | ” “ |
boolean | 布尔值类型【如:true,false,等价于1和0】 | false |
symbol【ES6】 | 符号 |
对象Object ------ 引用数据类型 、复杂值
typeof 关键字 ----- 查看数据类型 ------ let a = 'nwt'; console.log(typeof a);
number
1、最大值最小值关键字 ---- Number.MAX_VALUE / Number.MIN_VALUE
2、无穷大【Infinity 】 ----- Number.MAX_VALUE*2(此处2可以随便换成几)
console.log(Number.MAX_VALUE) //1.7976931348623157e+308 console.log(Number.MAX_VALUE*2) //Infinity
非数NaN --- 不与任何值相等,包括自己 (涉及到NaN的计算只会得到NaN)
isNaN( ) ---- 用来判断是否是数字 是数字返回false 、 不是数字返回true
console.log(isNaN(10)) //false
console.log(isNaN('abc' - 10)) //true
console.log(isNaN('10')) //false ------ /*判断前会做隐式转换*/
string
1、单引号' '【推荐使用】 , 双引号 " " 都可 ES6新增 ``【英文状态的~】
PS:注意引号嵌套问题,可以使用不同的引号来区分;也可以用转义符 \
let str = '他说:"hello"'
console.log(str) // 他说:"hello"
/*转义符*/
let str = '他说:\'hello\''
/*换行 ---- \n*/
let str = "我喜欢 \n timi"
/*查看字符串长度*/ --- 每个空格算1一个长度、\n 也会算两个长度
let str = '123456';
console.log(str.length); // 6
2、拼接字符串
//1.数值字符串+数值 ----- 字符串和任意字符串拼接都会被转成字符串
alert('12'+12); //1212
//2.数值+数值
alert(12+12);//24
//3.数值字符串相加
alert('100'+'100');//100100
//4.字符串相加
alert('hello'+'World');//hello World
+号总结口诀:数值相加,字符相连
3、ES6新增 字符串模板
---支持多行文本【enter换行】
---进行变量解析
//支持多行文本【enter换行】 ---- Tab缩进1格
let str1 = `0糖
0卡
0脂肪`
console.log(str1);
// 0糖
// 0卡
// 0脂肪
//进行变量解析
let name = "西施",age = 18;
console.log(`我叫${name},我今年${age}岁`) // {}中也可以进行运算
console.log(`我叫${name},我今年${age + 2}岁`) //....21岁
练习
/* 提示用户输入姓名年龄,拼接成一句话 */
const readline = require("readline-sync");
console.log('请输入姓名,年龄');
let name1 = readline.question();
let age = readline.question();
console.log(`你叫${name1},你今年${age}岁`);
PS:node中不能出现中文(window系统)
boolean布尔型
true(真) 、false(假)
在加法中true为1,false为0
let flag1 = true,flag2 = false;
console.log(flag1+1) // 2
console.log(flag2+1) // 1
let a = 10,b = '10';
console.log(a==b);//只是比较值,不比较数据类型
console.log(a===b);//值和数据类型都一样才返回true
会返回Boolean中false的情况
-
空字符串,包含”、“”、字符串模板``
-
0
-
NaN
-
false
-
null
-
undefined
undefined 未定义
let u;
console.log(u,typeof(u));//undefined undefined
console.log(u + 'aaa');//undefinedaaa
console.log(u + 1);//NaN
返回undefined的情况
-
访问未赋值的变量 --- let a;
-
任何被设置为undefined值的变量 ---- let a = undefined;
-
没有定义return表达式的函数,隐式返回undefined ----- function foo( ){ }
-
return 表达式没有显式的返回任何内容 ----- function foo( ){return;}
-
访问不存在的属性 zhangsan.grilfriend
null 空值
let space = null;
console.log(typeof(space))//Object
console.log(undefined==null);//true
console.log(undefined===null);//false
console.log(null+1); //1 /*null空值被当作0*/
PS:undefined表示缺少值,null通常用于释放内存【计算时被看作0】