JavaScript基础知【持续更新】

概述

编程语言和标记性语言

编程语言:有强逻辑和行为

标记性语言: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必须要做常量初始化(必须赋值)

区别varletconst
是否有块级作用域×✔️✔️
是否存在变量提升✔️××
是否添加全局属性✔️××
能否重复声明变量✔️××
是否存在暂时性死区×✔️✔️
是否必须设置初始值××✔️
能否改变指针指向✔️✔️×

数据类型

分为:基本数据类型和引用数据类型

基本数据类型 / 简单值

基本数据类型说明默认值
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】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值