开发语言分类
解释性语言:翻译一行,执行一行
JS、Python
编译性语言:通篇翻译后在执行
Java、C、C++、C#
代码报错:
1.语法错误 没有按照要求书写
2.逻辑错误
3.运行错误
开发流程
1.功能的设计
2.需求分析
3.功能开发(确定数据结构和算法)
4.功能测试
5.功能维护
6.功能上线
软件—程序–数据结构和算法
数据结构:存储数据的方式
算法:解决问题的方法和步骤
算法的特点:
1.有穷性:
一个算法的操作步骤,是在有限的范围内可以完成的
2.确定性
3.有0到多个输入
4.有1到多个输出
5.有效性(123/0无效)
ECMAscript ES5 ES6 版本号
//单行注释
/*多行注释/
终端操作问题
在终端打开(需要在文件单机右键打开终端) node 文件名加后缀
cls清幕
*** has already been declared ***重复声明 报错
*** is not defined ***没有声明 报错
undefined 当前变量声明未赋值(不是报错)
创建变量
ES5书写格式:关键字(词) 标识符(变量名)分号
eg:var f70;
ES6书写格式:关键字(词) 标识符(变量名)分号
eg:let F70;
var和let的区别
1.var声明的变量,是可以重复的,let不行
2.var声明变量 ,可以先使用后声明。
变量的赋值
书写格式 关键词 标识符 赋值符号 表达式 分号(写法叫变量初始化)
var F70 = 0 ;
使用
console.log()在终端输出小括号里的内容
声明常量(不能改变,只能声明一次)
书写格式:关键词 标识符(变量名)分号
const F73;
F73 = 123;
数据类型 (基础 引用)
基本(简单)数据类型
1.undefined
let F70 = undefined;
查看数据类型
console.log(typeof FFF);
typeof拓展
输出一个没有声明的变量,会输出undefined(不会报错)
原因:计算机会默认以var声明该变量
console.log(typeof FFF);
2.null 空
let F74 = null;
3.boolean 布尔类型(适用场景:判断条件)
两个值: 真 true 假 false
let F70 = true;
let F71 = false;
引用(复杂)数据类型
object
4.数值型
let num1=1;
let num2=1.5;
let num3=-200;
NaN:is not a Number;不是一个数字,是数值
isNaN(标识符)判断是不是一个纯数字
返回true则不是,false是
适用场景:判断用户的输入是不是一个纯数字 T/F
let inputNum = “abc”
console.log(isNaN(inputNum))//true
console.log(!isNaN(inputNum))//false
parseInt当前变量取整 (I是大写i)
注:从第一个纯数字截取,一直到非数字的前一位
第一个字符,不是数字,负号,返回NaN
第一个字符是0,到第一个不是0 之前都是无效
扩展:以0X开头代表十六进制
let inputNum = “123abc”;console.log(parseInt(inputNum))
5.string 字符型 字符串
书写格式:内容左右加引号 单引号双引号都可以
如果想在输出的内容有引号 外面双里面就单 外面单 里面就双
let str = "egucation";
console.log(str); //egucation
str='成都'
console.log(str); //成都
字符串模板
变
量
名
l
e
t
a
c
c
o
u
n
t
=
"
成
都
"
;
l
e
t
s
t
r
=
‘
欢
迎
光
临
{变量名} let account = "成都"; let str =`欢迎光临
变量名letaccount="成都";letstr=‘欢迎光临{account}啦啦啦啦`
console.log(str); //欢迎光临成都啦啦啦啦
symbol类型 在讲对象时讲解 没讲
数据类型的转换
boolean(布尔)类型转换(隐式转换) true 1 false 0
以下内容在转换布尔值时为false
1.false
2.0、-0
3.null
4.undefined
5.``、’’、""
6.NaN
强制类型转换布尔
let str = "abc"
let boo = Boolean(str);//把str内容转换成布尔值
console.log(boo)//true
数值类型的转换
强制转换数值
let str = “123”
let num = Number(str);
console.log(num typeof num);//123 number
str=“abc”
num=Number(str);
console.log(num,typeof num);//NaN number
快捷转换数值类型方式(隐式转换)
let str = "200"
let num = str -0; //js会降低报错 会把str直接转换成number
console.log(num,typeof num)
强制转换字符串
let num = 123;
let str = String(num)
console.log(str,typeof str) //123 string
快捷转换字符串类型方式(隐式转换)
let num = 123
let str = num + "";
console.log(str,typeof str);//123 string
向下取整
Math.floor()
向上取整
Math.ceil()
四舍五入
Math.round()
保留两位小数
Math.toFixed()
创建变量命名要求
软性要求:“见名知意"
硬性要求:
不能以数字开头 可以包含数字、字母、下划线、连字符
命名方式:
1.大驼峰命名法:SongYang
2.小驼峰命名法(除了第一个后面的首字母大写):songYangYa
3.蛇形命名法:song_yang_ya
运算符
++在后 在使用 在自增(--一样) 只能用在变量
let num1 = 1;
let num2 = num1++;
console.log(`num1:${num1},num2:${num2}`);//2 1
++在前,先自增,在使用(--一样)
let num3 = 1;
let num4 = ++num3;
console.log(`num3:${num3},num4:${num4}`);//2 2
注: 要在一个表达式中,才考虑先后顺序
算数运算符
%取余 +加 -减 乘 /除 =赋值运算符
简写 k=k+3 k+=3
k=k-3 k-=3
k=k/3 k/=3
k=k3 k*=3
k=k%3 k%=3
比较运算符 返回的是布尔值
大于 >
小于<
等于==
大于等于 >=
小于等于<=
不等于!=
全等 ===(值和类型都相同才会返回true )
不全等 !==
比较字符串会按位比较 一个一个的位置比较 非数字就比较ASC码 有数字就会转换成数比较
123a < 123b
判断用户输入的是不是纯数字
isNaN()
逻辑运算符
非 与 或
非运算 取反 表达式: ! 之前会先转换布尔
console.log(!1+2)//2 1取布尔 true 取反fales 0+2=2
console.log(!null)//false
与运算 (并且 同时) 表达式 : && 一假全假
情况1:
- 表达式1&&表达式2
- step1:先判断表达式1的值是不是flase
-
如果是则返回表达式1的值
- step2:若表达式1的值是true,则返回表达式2的值
- 情况2:
- 表达式1&&表达式2&&表达式3…&&表达式n
- step1:先判断表达式1的值是不是flase
-
如果是则返回表达式1的值
- step2:若表达式1的值是true,
-
则判断表达式2的值,是不是true
-
是true,则判断表达式3,以此类推。
-
是false,则返回表达式2的值,以此类推。
console.log(true && true)//true
console.log(true && true && false)
console.log(true&&false&&1);//false
console.log(true&&0&&1);//0
console.log(true&&1&&2);//2
console.log(true&&0&&false);//0
或运算 表达式 : || 一真全真(判断第一个是不是真 是直接返回 不是就直接返回第二个)
console.log(false || false)//fales
console.log (true || true || false)// true
位运算符
|和&
先把表达式转换成二进制,按位运算后在转出十进制
三目运算符
书写格式:表达式1(条件)?表达式2:表达式3;
如果表达式1成立 则变表达式2 否 表达式3
快速转数值 -0 或*1
快速转布尔值 !(!变量名)
转换字符 变量名 变量+""
NaN不等于任何值 包括他自己
isNaN(标识符)判断是不是一个纯数字
ASC码每个字母都有值
获取用户输入
const 命名 = require("readline-sync");
判断用户输入最大的数
const sz = require("readline-sync");
console.log(`请输入第一个数`);
let inputNum1 = sz.question()-0;
console.log("请输入第二个数");
let inputNum2 = sz.question()-0;
console.log("请输入第三个数");
let inputNum3 = sz.question()-0;
inputNum1 > inputNum2&&inputNum1>inputNum3
?
console.log(`您输入的三位数最大数是`+inputNum1)
:
(inputNum2>inputNum3
?
console.log(`您输入的两位数最大数是`+inputNum2)
:
console.log(`您输入的两位数最大数是`+inputNum3)
);
多次判断
if(判断条件){ 代码块 条件为真就会执行这里的代码块}else if(判断条件){ 代码块 条件为真就会执行这里的代码块} else if(判断条件){ 代码块 条件为真就会执行这里的代码块} else{ 代码块 条件为假就会执行这里的代码块}
作用域
全局作用域
声明的变量不包括在大括号里,JS文件的任何地方都可以使用
局部作用域
声明的变量在某个大括号里面 就只能在大括号里面使用
不同的作用域可以声明相同变量名的变量(仅限let和const)
变量会向上找 若果找不到就会报错 *** is not defined
switch语句
书写格式:switch(匹配值){
case 匹配值 1 : {代码块;}
case 匹配值2 : 代码块;
}
1.匹配方式是全等
2.break终止case的继续执行代码
使用场景:功能选项
3.default 结束输出
判断是不是数字
!isNaN(num)
num == parseInt(num)