一、js的书写方式
-
行内js
-
内部js
我们的JS如果是内部 也需要写到script标签中
script标签中的代码 当页面加载的时候 就会执行
script标签可以写在 html 页面的任何位置,包括 html标签外
类似于 alert confirm prompt 这三个语句 优先级别最高
它们会阻塞代码的运行 你如果不结束他们 后面的代码就不会走
- 外部js
一旦script标签作为引入外部JS的时候 那么 其包裹的代码 将作废
二、JS中的输入和输出
1)输出
- 控制台位置的输出
- 页面上的弹出
- 控制台输出
// 普通输出
console.log("这是一条普通的消息");
// 警告输出
console.warn("这是一条警告输出")
// 错误输出
console.error("这是一条错误输出");
- 弹出输出
//2.1普通弹框(alert)
window.alert("这是一个普通的弹窗")
alert("这是一个弹出")
// 2.2具有选项的弹框(confirm)
window.confirm("这是一个有选项的弹出")
confirm("这是一个有选项的弹窗")
// 2.3具有输入的弹框(prompt)
window.prompt("这是一个有输入的弹出");
prompt("这是一个有输入的弹出")
三、变量和常量
1. 含义:
常量则是不会改变的量
常量还有一种叫法 字面量
1 2 3.14 77 99 88 这都是常量
常量的修饰词
const PI=3.14;
// 这里用const声明的量 叫常量
// 开辟了一个新的空间 给这个空间命名为PI 这个空间里的值是3.14
// 这个空间的类型 是一个常量 空间里面的值不能发生改变
console.log(PI);
PI = 3.15;//这里就会报错 因为常量 不能改变
console.log(PI);
变量就是用来存储数据的 数据又是存在内存中
name—wangcai
这里的name就是我们给内存空间起的别名
每一块内存空间 都有地址 如果说你想操作这块内存空间中的数据
通过地址访问这个内存空间
实际上说的对别名的操作 name=lisi 实际上是对内存空间进行操作
// 1.定义变量的第一种方式
a=1;//是直接将a定义到了window上面
console.log(a);
// 少了修饰词
// 2.定义变量的第二种方式
var b=1;//将a定义到了vo中 主栈
console.log(b);
// 3.定义变量的第三种方式
let c=1;
console.log(c);
2. 变量的注意事项:
1) 声明变量和定义变量的区别
var name="wc"; //定义一个变量
var age; //声明一个变量
//如果声明了一个变量,但是没有给他值
//请问 它的值是什么?undefined
2) 定义变量的2种方法
var name="wangcai";
var age;
age=18;
console.log(name,age);
3) 不使用var声明变量
//此时的a叫全局变量
a=1;
4) 全局变量和局部变量的分界点是函数
var a=1; //此时你的a是全局变量
function fn(){
var a=2; //这里的a是在函数内部定义 所以是局部变量
console.log("函数执行了");
console.log(a);
}
5) 如何一次性定义多个变量
var a=1,b=2;//等价于 var a=1 ;var b=2
var c=d=1; //等价于 var c=1 ;d=1
四、js中的数据类型
- 五种基础数据类型
1.数字型 number
2.字符型 string
3.布尔型 Boolean
4.undefined
5.null
- 三种引用数据类型
1.数组 array
2.函数 function
3.对象 object
- typeof
判断数据类型 (基础数据类型)
是运算符 右结合性
number 数据类型
1)最大值和最小值
console.log(Number.MAX_VALUE);
console.log(Number.MIN_VALUE);
console.log(10/0);//Infinity无穷大
console.log(-10/0);
2)进制
// 10进制 16进制 8进制 2进制
var c=110;
console.log(c);//此时的C是10进制
var d=012;
console.log(d);//0表示什么 八进制
var e=01476;
console.log(e);//0表示8进制 6*8^0+7*8^1+4*8^2+1*8^3
// 0001100111110
var f=0xa;
console.log(f);//0x开头的是16进制
3)NaN :Not a Number
// 如何判定一个变量是否是NaN
// isNaN
console.log(isNaN(10*"abc"));
console.log(c == d);//false
console.log(c = d);//10
4)在JS中 尽可能不要对小数进行运算
// 因为对小数运算的时候 会默认的转成2进制 但是小数转成2进制之后 和原本的数据 不等价
// 如果说你想对小数运算 先把小数变成整数
// 一些简单的运算符 == === > < >= <= 得到的结果都是布尔类型
// console.log(Number);
undefined 和 null
<script>
var a;
console.log(typeof a); //undefined
var n=null;
console.log(typeof n); //object
console.log(n); //null
var c=undefined;
console.log(c); //undefined
console.log(typeof c);//undefined
</script>
五、数据类型转换
1.转换成字符串类型
方法:
a.通过toString(函数)
b.通过 + - (运算符)
c.通过构造器(强制类型转换)(显示类型转换)
a.通过toString(函数)转换
- 将数字转成字符串
var a=123;
console.log(a.toString());
console.log(typeof a.toString());
console.log(String(a));
console.log(typeof String(a));
- 将布尔转成字符串
var b=false;
console.log(b.toString());
console.log(typeof b.toString());
- 将undefined转成字符串
var c;
// undefined使用toString 不行
// console.log(c.toString());
// console.log(typeof c.toString());
// String构造器
console.log(String(c));
console.log(typeof String(c));
- 将null转成字符串
var d=null;
console.log(String(d));
console.log(typeof String(d));
b.通过 + - (运算符)转换
var aa=1;
var bb=1;
console.log(aa+bb);//这里的+ 是相加运算符
var cc="hello";
var dd="js";
console.log(cc+dd);//hello js 此时的+起的是 拼接字符串的作用
console.log(aa+cc);//此时的+ 拼接 1hello 隐式类型转换
// 在JS中规定 +左右两边的数据类型不一致的时候 就会将数据变成一致后在计算
- 注意
// 注意点1 不能对数字直接toString
// console.log(123.toString()); 不能直接对数字进行toString
console.log((123).toString());//如果真的想这样做 给数字+括号
// 注意点2
console.log((123).toString(2));
// 将123转换成二进制数字所对应的字符串
2.转换成数字类型
转数字的方法 3种
1)构造器 强制类型转换
2)运算符 + -
3)parseInt parseFloat
1)构造器 强制类型转换
- 字符串转数字
// 字符串是数字字符串
var a="123";
console.log(Number(a)); //123
console.log(typeof Number(a));//num
// 字符串是空串
var b="";//0 空串转成数字 就是0
console.log(Number(b));
console.log(typeof Number(b));
// 有数字有字符
var c="1x2c";//NaN 有字符有数字 通过构造器转过来的就是NaN
console.log(Number(c));
console.log(typeof Number(c));
- 布尔转数字
var d=false; //false 0
var e=true; //true 1
console.log(Number(d),Number(e));
console.log(typeof Number(d),typeof Number(e));
console.log(Number(c==d));
- undefined转数字
var f; //NaN
console.log(Number(f));
console.log(typeof Number(f));
- null转数字
var g=null; //0
console.log(Number(g));
console.log(typeof Number(g));
2)运算符± 转换
// 1.和字符串搭配
var aa="111"
console.log(+aa); //111
console.log(typeof +aa); //number
console.log(typeof -aa); //number
// +相加运算 +拼接字符 +隐式类型转换
var bb="";
console.log(+bb); //0
console.log(-bb); //-0
console.log( typeof +bb);
var cc="1c2x";
console.log(+cc); //NaN
console.log(-cc); //NaN
console.log(typeof +cc);
// 2.和布尔搭配
console.log(+false);//0
console.log(typeof +false);//number
console.log(+true);//1
console.log(typeof +true);//number
// 3.和null搭配
console.log(+null);//0
console.log(typeof +null);//number
console.log(-null);//-0
console.log(typeof -null);//number
// 4.和undefined搭配
console.log(+undefined);//NaN
console.log(typeof +undefined);
console.log(-undefined);//NaN
console.log(typeof -undefined);
3)parseInt parseFloat 转换
// 1.以数字开头的字符串
var aaa="1x2c";
console.log(parseInt(aaa));//1
console.log(typeof parseInt(aaa));//number
// 2.以字母开头的
var bbb="x1c2";
console.log(parseInt(bbb));//NaN
console.log(typeof parseInt(bbb));//number
var ccc="3.1415926asd"
console.log(parseInt(ccc));//3
console.log(parseFloat(ccc));//3.1415926
3.转换成字符串类型
0
NaN
undefined
null
空串
转换成字符串是 false 其余都是true
六、js中的运算符
1.算术运算符
运算符有优先级别
先* / 后+ -
如果优先级别一样的时候 从左往右
= 赋值运算符 右结合性 从右往左
1) 加法运算符
- 任何非数值类型的数据参与加法运算之前,都会隐式转换成数值类型后在参与运算
- 任何数据和NaN运算后,结果都是NaN
- 任何数值类型和字符串相加后,+都会变成字符串拼接运算符,而不是相加运算符
2) 减法运算符
- 任何非数值类型的数据参与减法运算之前,都会隐式转换成数值类型后在参与运算
- 任何数据和NaN运算后,结果都是NaN
- 任何数据和字符串相减后,都会把字符串变成数值类型后在运算
特殊:
console.log(-"1ab");//NaN
3) 自增自减运算符
需要注意的是 常量不能++ 或者–
console.log(1++);
console.log((1+1)++);
// 自增运算符 ++ 让数据+1
// 自减运算符 -- 让数据-1
var num=10;
console.log(num+1);//11 这里并没有改变num的值
console.log(num+=1);//11 num=num+1 num=11 整体的值是右值
console.log(num++);//11 此时的num是11 所以旧值是11 所以num++整体的值是11
console.log(++num);//13 此时到这里的时候 num的值是12
// num++ 整体值是旧值
// ++num 整体值是新值
4) 关系运算符
< > >= <= == === != !==
只要是运算符 就有一个整体的值 对于关系运算符来说 整体的值是true或者false
注意点:1.对于非数值类型的数据来说 都会先转成数值类型进行判断
2.对于关系运算符来说 任何数据和NaN做对比 结果都是false
3.如果参与比较的双方都是字符串类型,那么不会转换成数值作比较 而是转成对应unicode编码作比较
5) 三目表达式
表达式1 ? 结果1 : 结果2
如果表达式的值为 true 那么整体的结果就是结果1
如果表达式的值为 false 那么整体的结果就是结果2
七、js中的流程控制
- if 判定条件框中 最后都会转成boolean
- 在判断的时候 常量可以写到==的左边 但是我们一般情况下 不这样写
但是常量不能写赋值运算符的左边
if(123 == a){
console.log(2);
}
//常量不能写赋值运算符的左边
if(123=a){
console.log(3);
}
- if语句后面的{}不写的时候,如果条件成立,只会执行if后面的第一条语句 也就是说相当于给第一条语句加了一个{}
数组
如何创建数组
- 直接声明
- 可以通过构造器来创建数组
var arr=new Array(10)
// 这里的括号中的10 是数组的长度
// new出来的一定是一个对象 所以你说数组是对象 也没问题
console.log(typeof arr); //object
// 通过new创建数组的时候 如何直接给值
var arr1=new Array("1","2","3")
如何给数组赋值
- 可以在定义的时候 直接赋值
var a=[1,2,3]
- 可以通过下标来赋值
var a=[]; //堆空间
a[0]=1;
a[1]=2;
数组的增删改查
增(push && unshift)
var arr=["hello","js"];
// push 添加的位置是最后
arr.push("666")
// unshift 添加的位置是最前面
arr.unshift("我是老大");
删(pop && shift)
删除后面元素 pop()
// ()里不需要写参数
// pop()整体的值是我们删除掉的元素
var arr=["hello","js","666"];
前面删 shift()
// shift()整体的值是我们删除掉的元素
console.log(arr.shift());//hello
var arr1=[1,2,3,4,5,6,7,8,9,10,13,15,16,19];
删除指定位置的元素 splice()
// splice(),有两个参数,第一个参数我们要删除的下标的位置,删除几个
// 注意点 splice删除一个元素后,数组中下标对应的值都发生了偏移
arr1.splice(0,1)
查 ( indexof )
indexof 就是查找你这数组中有没有这个元素 如果有返回元素的下标 如果没有返回 -1
var arr=[1,2,3,4,5,6,7,8,9,10];
// 查这个数组中是否有6
for(var i=0;i<arr.length;i++){
if(arr[i]==6){
console.log("有");
}
}
if(arr.indexOf(12)!= -1){
console.log("有");
}else{
console.log("没有");
函数初识
如何声明一个函数
- function 函数名(){}
- var a=funtion(){}
- var b=new Function(‘x’,‘y’,‘return x+y’)
返回值
返回值会返回到 函数调用处
如果一个函数没有返回值,那么它的默认返回是 undefined
return 后面的代码不会执行
对象
什么是对象?
对象是属性的无序集合
创建对象
var person={
// 对象上的属性
name:"zhangsan",
age:"15",
sex:"man",
height:"186cm",
weight:"75kg",
// 对象上的方法
say:function(){
console.log("我是"+this.name);
}
}
访问对象上面的属性
- 通过打点调用对象上的属性
console.log(person.name);
- 通过方括号,属性名
console.log(person["height"]);
对象属性的增删改查
// 增
person.address="bj";
// 访问一个对象上没有的属性的时候 就是undefined
// 删
delete person.address;
// 改
person.name="lisi"
字符串
字符串可以像数组一样访问
var str="asd"
console.log(str[0]);//1
var str1 = new String("hello js")
// new出来的一定是一个对象
console.log(str1.toUpperCase());
console.log(typeof str);
// 立即封装
console.log(str.toUpperCase());
console.log(typeof str);//string
split分割
split 分割 将字符串按照指定的标识符进行分割
var newArr=str.split(“,”)
join拼接
将数组中的每一项进行拼接,中间的连接单位 是你的参数
console.log(newArr.join(" "));