认识Javascript
编译型:在运行程序之前,首先检查语法是否正确,如果不正确,直接不允许运行
使用严格,比如:Java/C++/C#等
解释型:在运行程序之前,不需要先检查语法是否正确,直接执行,但是碰到错误就会停止后续代码
使用更加自由,比如:JavaScript、PHP、Node.js…
弱类型:变量保存的数据是随意的,其数据类型是由数据来决定的
相对而言也更加的自由
1 - Number 数字
“1” - String 字符串
强类型:变量保存的数据,是由数据类型来决定的
更加的严格,比如:Java
面向对象
对象名.属性名;
对象名.方法名();
Javascript使用
- 使用方式:
直接在HTML页面上写一个script标签,里面就可以写入js代码 - 外部js,进行引入
方式:
创建一个xx.js的文件,里面书写js代码
在HTML页面引入,只要有了src属性,此处就不可以在写代码了
输出方式/断点输出:帮助我们检查错误:
在控制台输出日志 :console.log(想要输出/查看的东西);
会在F12的console里显示日志
在页面上输出日志 :document.wrtie(想要输出/查看的东西);
document当前文档 write写入:在页面上输出,而且支持识别标签 :绑定了点击事件后输出,会把页面上原来的HTML和CSS都全部替换掉
在警告弹出框输出日志 :alert(想要输出/查看的东西);
在一个浏览器自带的弹出框中输出日志,但是弹出框会卡住页面,用户只能看到一个白板
变量于常量
变量:创建后,值可以再次修改
何时使用:以后反复使用到的数据,要提前保存在一个变量中,之后使用变量名,相当于使用变量的值
如何使用:var 变量名=值;
特殊:
-
变量名的命名方式
1、不能以关键字命名
2、不能以数字开头
3、建议下划线命名法 或 小驼峰命名法name,age,gender,weight,height,hobby xingming,nianling,xingbie,tizhong,shengao,aihao 更不推荐:a,b,c,d,d1,d2,d3...
-
当变量名为name,不管保存的数据为什么类型,都会悄悄的转变成一个字符串
-
多个变量创建可以简写:
var 变量名1=值1,变量名2=值2,....; 常量:创建后,值不可以再次修改,只能设置一次值 生活中的常量: PI - 3.1415926.... 一个小时60分钟.... 一天24个小时 一年365/366天 语法:const 常量名=值;
算数运算符
%:读作取余,俗称模,两个数相除,不去商,而取其除不尽的余数
判断奇偶性:num%2,结果为0说明是偶数,结果为1说明奇数( 以后可以用于判断)
获取一个数字的倒数n位:
例如:
1234%10 -> 4
1234%100 -> 34
1234%1000 -> 234
+运算:如果左右两边出现了一个字符串,都会悄悄的转为字符串,+运算不再是+运算,而是字符串的拼接
-*/%:字符串也可以变为数字,前提:必须是纯数字组成的字符串
若字符串包含了非数字字符,直接转为NaN:Not A Number (不是一个数字,但确实是数字类型),其缺点有:
1、参与任何算术运算,结果仍为NaN
2、参与任何比较运算,结果都是false
数据类型:
原始/基本/值类型:5个
Number - 数字,取值:无数个
String - 字符串,取值:无数个,必须写上'' 或 ""
Boolean - 布尔,取值:两个:true/false 用于判断比较的条件时使用
Undefined - 取值:1个:undefined,创建了一个变量,没有赋值,默认值为undefined,用来做大部分操作都会报错!
Null - 空,取值:1个:null,释放变量/内存,节约内存空间
引用/对象类型:11个引用类型的对象(很多很多的属性和方法)
扩展:用户输入弹出框: var user=prompt(“提示文字”,“默认值”)
数据类型转化
不同的数据类型做操作可能出来的结果是不一样的:JS获取页面上的一切东西,数据类型默认都是一个字符串,typeof(想要查看的东西)
Number + Number = Number
Number + String = String
默认:悄悄的将左右两边的东西,转为一个数字,再运算
特殊:
别的数据类型其实也可以转为数字
true->1
false->0
undefined->NaN
null->0
NaN:Not A Number:不是一个数字,但是确实是数字类型,不是一个有效数字
显示/强制转换:强制转为我们需要的类型,再做操作
-
转字符串:var
str=x.toString();(x不能是undefined或null,因为undefined和null不能使用任何的.操作)
页面上的一切东西,数据类型默认都是一个字符串 -
***转数字:
1、*parseInt(str/num); parse->解析 Int->整型 执行原理:专门为字符串和小数转为整数数字准备的,从左向右依次读取每个字符,碰到非数字字符,就停止转换, 如果一来就碰到了不认识的,则为NaN 2、*parseFloat(str); parse->解析 Float->浮点型 执行原理:几乎和parseInt一致,认识第一个小数点 3、Number(x);万能方法
function基础
-
Function:函数,称之为方法:需要提前“预定义好”的,以后就可以“反复使用”的“代码段”
-
如何使用:
1、定义/声明/创建函数: function 函数名(){ 若干的代码 } 2、调用/使用函数: 1、要么在js中直接固定写死,要执行几次:函数名(); 2、交给用户绑定在某个元素上,写上点击事件,让用户来触发: <elem onclick="js代码">内容</elem>
-
何时使用:
1、不希望打开页面立刻执行,而在需要时再使用 或 由用户来触发 2、希望能够反复执行,不用刷新页面 3、以后任何一个独立的功能体,都要单独封装为一个函数 4、函数的地位非常高,函数是第一等公民地位,随时随地考虑能不能封装为一个函数,尤其是重复的代码 5、函数内的一切内存,函数调用完毕后都会自动释放
4、带参数的函数:
创建:形参:形式参数,其实就是一个变量,但是不需要写var,而且默认也没有保存任何值,默认值为undefined function 函数名(形参,形参,...){ 函数体; } 使用:实参:实际参数,真正的值,需要再你调用时再传入 函数名(实参,实参,...) 特殊:1、传实参的顺序一定要和形参的顺序一一对应,并且数量也要对应 2、不是一定要带参数的函数才是好函数,具体情况,需要具体分析: 如果函数体是固定的,则为普通函数 如果函数体希望根据传入的实参不同,做的略微不同,则为带有参数的函数
分支结构
-
程序的流程控制语句:
1、顺序执行 -> 默认,从上向下的依次执行 2、分支结构 -> 通过条件的判断,选择部分代码执行 3、循环结构 -> 通过条件的判断,选择要不要重复执行某些代码
-
比较运算符:“>” ”<“ ”>=“ ”<=“ ”==“ ”!=“
用于做判断/比较的 结果:一定是一个布尔值 强调:如果你想要判断多个条件,绝对不能像数学的写法去写 解决:逻辑运算符
-
逻辑运算符:
&&:与,并且:要求全部条件都要满足,最后的结果才为true 只要有一个条件不满足,结果则为false ||:或:要求全部条件都要不满足,最后的结果才为false 只要有一个条件满足,结果则为true !:颠倒布尔值
-
分支的语法:
-
一个条件,一件事,满足就做,不满足就不做 if(条件){ 操作 } 一个条件,两件事,满足就做第一件,不满足就做第二件 if(条件){ 操作 }else{ 默认操作 } 多个条件,多件事,满足谁就做谁 if(条件1){ 操作1 }else if(条件2){ 操作2 }else{ 默认操作 }
循环结构
反复执行 “相同”或 “相似”的操作
循环三要素:
1、循环条件:开始 - >结束,循环的次数
2、循环体:做的操作是什么
3、循环变量:记录着我们当前在哪一次,而且他会不断的变化,往往都会向着不满足循环条件进行
1、while循环:
语法:
var 循环变量=几;
while(循环条件){
循环体;
循环变量变化;
}
执行原理:首先创建了循环变量,然后判断条件,如果条件满足,则做“一次”循环体操作,并不会退出循环,回过头继续判断条件满足吗,如果满足,则再做“一次”循环体操作.......
直到循环条件不满足,才会退出循环
宏观上感受循环一瞬间就结束了,但是微观上来说其实是“一次一次”执行的
1、当不知道从何开始,到何处结束时,会产生死循环:永远不会停下来的循环
何时使用:不确定循环次数的时候
while(true){
循环体;
}
2、退出循环语句:break 只能在循环中使用,多半都是搭配死循环使用的