什么是变量
可以变化的值
1. 变量是用于存储信息的容器
2. 变量是一段命名的存储空间
3. 变量是在程序运行过程中值允许改变变量的值
4. 变量是由变量名,变量值,和变量类型组成
变量命名规则
第一个字符必须为字母,_或$,其后的字符还可以是数字
严格区分大小写,要有一定的含义
建议使用小驼峰规则来命名变量。redApple
不能使用关键词,保留字作为变量名
变量的命名和复制
1.var 变量名 变量名=值
2.var 变量名=值
3.变量名=值
4.var 变量1=值1,变量2=值2
注意
-
变量名是浏览器关闭后才释放在,在没关闭之前随时使用
-
重新声明的变量,不会丢失原始值,除非重新赋值
-
换行是语句的结束,最好结束时都加上 “ ; ”
强类型语言/弱类型语言
强类型语言【java】:
-
要求变量的使用要严格符合定义,所有变量都必须先定义后使用。
-
一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了
弱类型语言【js/python/php】:
-
它与强类型定义语言相反, 一个变量可以赋不同数据类型的值
判断数据类型
用typeof运算符判断数据类型
string
js中用来表述文本的数据类型
-
字符串用单引号或双引号包括起来
-
单双引号均不能解析变量
-
变量与字符串,变量与变量之间可以使用运算符‘+’来链接
-
单引号和双引号可以互相嵌套,如果单引号中要嵌套单引号,需要使用转义字符
Number
按照进制划分:二进制、八进制、十进制、十六进制
按照其他划分:整形、浮点型、NaN(not a number)
js中所有的数字是以IEEE-75标准格式表示的,浮点数的精确问题不是js特有的;因为有小数点以二进制表示位数是无穷的
整形: 5,10,-100,0xff00(十六进制),0377(八进制),0b1010(二进制),不管输入的是几进制,最终显示时都会转为10进制
浮点型:
浮点型是一个近似数,有时通过js计算得到的不是你想要的数
console.log(0.3 + 0.1);
console.log(1.0 - 0.9);
console.log(0.2 + 0.5);
console.log(0.333-0.1.toFixed(2));
console.log(0.235+0.265.toFixed(2));
NaN(not a number)
NaN是一个特殊的number值,not a number表示非数字,当程序由于某种原因计算错误时,将产生一个无意义的数字NaN
NaN与任何值都不想等,包括NaN本身 任何涉及NaN的操作,结果都为NaN
var a = bb;
age =20;
alert(a-age);//Nan
Booleam
-
值只有true和false。分别代表逻辑真与假
-
布尔值通常用来表示比较所得的结果
-
true和false是严格区分大小写的
var num1 = 20;
var num2 = 12;
console.log(num1 > num2);//true
console.log(num1 < num2);//false
undefined
-
定义了一个变量但没有为该变量赋值,使用了一个并未赋值的变量
-
使用了一个不存在的对象的属性时
null
-
null表示一个空值
-
null不等于空字符串""、''或0
-
null和undefined的区别是,null表示一个变量被赋予了一个空值,而undefined则表示该变量尚未被赋值
Array(数组)
方法一:var 数组名=new Array();
方法二:var cars=new Array("Audi","BMW","BYD");
方法三:var cars=["Audi","BMW","BYD"];
var boxObj = new Object();
boxObj.color = 'red';
boxObj.brand = 'BMW'
console.log(boxObj);
console.log(boxObj.color);
var arr = ['少林寺','嵩山','武功山']
console.log(arr);
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
var arr1 = new Array('北京','上海','广州')
console.log(arr1);
//多维数组
var arr2 = [['金水区','中原区','惠济区'],'武汉','重庆']
console.log(arr2);
console.log(arr2[0]);
console.log(arr2[0][1]);
object对象
对象:一切皆对象
面向过程:按照事件的发生顺序,从上往下依次执行
对象对象:只会对象做某件事情
对象: 属性:本身所拥有的特性 方式:能做的事情
对象: { },使用{ }包括起来的都是对象 [ ], 使用[ ]包括起来的都是数组
创建对象: 方法一:var 对象名称 = new Object(); 方法二:var 对象名称 = {'键':‘值’,'键':‘值,'键':‘值,'键':‘值};
//创建对象
// 车
var car = new Object();
// 属性
car.color = 'red';
car.brand = 'BMW';
car.price = 28.5;
// 方法
car.run = function(){
console.log('我能跑');
}
car.stop = function(){
console.log('我能停止');
}
car.setSpeed = function(){
console.log('我能定速巡航');
}
//获取对象中的属性和方法
// 调用整个对象
console.log(car);
// 类似数组的方式调用
console.log(car['color']);
console.log(car['price']);
// 使用对象的方式调用
console.log(car.color)
console.log(car.price);
// 调用对象里面的方法
car.run();
数据类型转换
-
自动转换->js会根据需要自动进行类型转换,但是转换时会遵循一定的规则
-
强行转换->通过内置对象的方法强制转换
转为字符串
自动转换
类型 | 转换字符串型后的结果 |
number | NaN、0、或数值对应的字符串 |
null | "null" |
boolean | "true"、"false" |
undefined | "undefined" |
object | 若对象存在为其toString()方法的值,若对象不存在为"undefined" |
强制转换:
String()、object.toString()
转为数字类型
自动转换
类型 | 转换为数字型后的结果 |
string | 若内容为数字则为相应数字,否则为NaN |
null | 0 |
boolean | true转为1,false转为0 |
undefined | NaN |
object | NaN |
注意:数学运算(特殊情况:+再出现字符串的情况下不是数学运算,而是字符串的拼接)
强制转换
Number() 按照自动转换规则转换
parseInt(string) 、parseFloat(string)
isNaN() 函数用于检查其参数是否是非数字
注意:parseInt还可以接受第二个参数(2到36之间),表示呗解析的值的进制,返回该值对应的10进制数。parseInt的第二个参数为10,即默认是十进制转十进制
parseInt('1000'); // 1000
// 等同于
parseInt('1000',10); // 1000
parseInt('1000',2); // 8
parseInt('1000',6); // 216
parseInt('1000',8); // 512
转为布尔类型
自动转换
类型 | 转换布尔型后的结果 |
""或'' | false |
0或0.0 | false |
NaN | false |
undefined | false |
null | false |
其它 | true |
强制转换
Boolean()、!!
特殊案例
console.log(Boolean([])); // true
console.log([] == false); // true; ==两边的数据类型不一致,需要转为数字进行比较;[]=>字符串''=>数字0
console.log(![] == false); // true ==的优先级比较低,肯定是先算左边 ![] 然后与后面进行比较,[]转为布尔值为true 取反 false false==false
console.log('0' == false); // true
在==比较的过程中,数据转换的规则 类型一样的几个特殊点:
{ } == { } //false,对象对比的是堆内存的地址
[ ] == [ ] //false
NaN == NaN //false
类型不一样的转换规则:
-
null == undefined true,但是换成 === 结果是false(因为类型不一致),剩下null/undefined和其他任何数据类型值都不相等
-
字符串 == 对象,要把对象转为字符串
-
剩下如果 == 两边数据类型不一致,都是需要转换为数字再进行比较
如果类型都是字符串,就会按照ASCII编码的进行对比
运算符
算术运算符(+,-, *,/,%,++,--)
“+”算数加和字符串相接
i++ 先赋值,再加1;++i 先加1,再赋值
注意:正号有隐式类型转换功能
alert(typeof(+'5')) // number
比较运算符(>,<,>=,<=,,=,!=不等于,!==不全等于,===)
专门用作判断,返回值结果为boolean
比较运算符的结果是Boolean类型
赋值运算符(=,+=,-=, *=,/=,%=)
= 赋值运算符
var a = 10;
var arr = ['张三','李四','王武','孙刘','马奇']
var i=10;
i+=1 //i++ 效果一样
使用场合:累加求和,字符串拼接
逻辑运算符(!,&&,||)【两边均为表达式】
运算符 | 解释 |
! | 逻辑取反 |
&& | 逻辑且;只有两个操作数都为 true 时,才返回 true,否则返回 false。 |
|| | 逻辑或;如果两个操作数都为 true,或者其中一个为 true,就返回 true,否则就返回 false。 |
??(了解) | 空值合并运算符,如果左侧的表达式为 null或者 undefined 时,返回其右侧表达式,否则返回左侧表达式。 |
逻辑运算符用于测定变量或值之间的逻辑
|| 存在断点问题,第一个式子成立,不在执行第二个式子;如果第一个式子不成立,执行第二个式子(真假为真,假假为假,真真为真)
&& 式子两边同时成立,执行的是if(true),只要有一个不成立。或两个都不成立执行false
||运算方法:
只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。 只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。
&&运算方法[假前真后]:
只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;
条件运算符【三元运算符】
条件表达式?结果1:结果2
如果条件表达式结果为true则返回结果1
如果条件表达式结果为false则返回结果2
运算符的优先级
优先级 | 分类 | 运算符 | 结合性 |
---|---|---|---|
1 | 后缀运算符 | ( )、[ ]、-> | 从左到右 |
2 | 单目运算符 | !、*(指针)、& 、++、--、+(正号)、-(负号) | 从右到左 |
3 | 乘法/除法/取余 | *(乘号)、/、% | 从左到右 |
4 | 加法/减法 | +、- | 从左到右 |
5 | 位移运算符 | <<、>> | 从左到右 |
6 | 关系运算符 | <、<=、>、>= | 从左到右 |
7 | 相等/不等 | ==、!= | 从左到右 |
8 | 按位与 | & | 从左到右 |
9 | 按位异或 | ^ | 从左到右 |
10 | 按位或 | | | 从左到右 |
11 | 逻辑与 | && | 从左到右 |
12 | 逻辑或 | || | 从左到右 |
13 | 三目运算符 | ? : | 从右到左 |
14 | 赋值运算符 | =、+=、-=、*=、/=、 %=、 >>=、 <<=、&=、^=、|= | 从右到左 |
小括号>算术运算符>比较运算符>逻辑运算符>赋值运算符
json数据类型
JSON:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式
主要作用: JSON 是用于存储和传输数据的格式。
JSON 通常用于服务端向网页传递数据 。
特性: json的键不能重复,如果键是一个完整的单词,可以直接写,如果键里面包含了空格,要用引号引起来
{key: value, key: value}
var address = {
"city":"成都",
province:'四川',
aaa:{
name:'Test',
value:{
value:"123"
}
},
bbb:[{
name:"lisi"
},{
name:"zhangsan"
},{
name:"wangwu"
}],
say:function(){
}
};