js是一种动态类型以及弱类型的语言(就是指变量数据类型可以在程序的执行过程中发生变化。)
变量在申明的时候不需要指定数据类型。
变量的类型是根据保存的数据决定的。
数据类型
基本数据类型
数字型、字符串型、布尔型
复合数据类型
对象类型
特殊数据类型
null:null
undefined:undefined
为什么分这么多数据类型?
为了优化内存
number类型
数字型分为两种,一种叫做整数型,一种叫做浮点型(小数),对于其他语言来说,严格区分整数型与浮点型的,JS不一样,JS里面严格意义来说没有整数型,整数是使用浮点型来保存的。
浮点数本身具有不精确性,所以使用浮点数的计算要小心。
例如:
console.log((0.3-0.1)==0.2); =>false(运行之后的结果)
number类型的位数:64位
第一位:符号位 0为整数,1为负数
在JS里面
从第二位到第十二位:指数位
从第13到64位:精度位
JS里面能够准确的表示15位的整数。
计算方式:
Math.pow()实现数学的次方运算
第一个参数是基数
第二个参数是次方
例:Math.pow(2,4)=16;
Math.random(); 随机数
JS可以通过两个常量获取出来JS数字的最大值和最小值
Number.MAX_VALUE
Number.MIN_VALUE
等号全解
=:赋值号;
==:判断符号,返回的是一个布尔值,判断两边数据的值是否相等。
===:全等判断,返回的也是一个布尔值,判断的是两边数据的值以及数据的类型是否一致。
科学计数法
JS里面的规则是当小数点后面的数字超过21位的时候会自动转换为科学计数法
当小数点后面的0大于5个的时候也会自动转化为科学计数法
eg:
1345678345678.3456789087654=1.3456783456783456789087654 * 10^12
0.00000000000121256=1.21256*10^-12
123e3 = 123 * 10^3
infinity(无穷大)
在前面加一个"-"就变为无穷小
无穷大是等于无穷大的,无穷大计算的时候也遵循无穷原则。
Infinity-Infinity:NaN
NaN:not a number 不是一个数字
但是NaN是数字类型。tupeof NaN:number
NaN是不等于NaN
什么时候会产生NaN?
基本上是数学计算出错的时候。
所以看到NaN就要检查自己的代码。
进制表示法
类型前缀:
- 0b前缀表示2进制
eg: 0b010101010
- 0o前缀表示8进制
eg: 0o4356734
- 0x前缀表示16进制
eg: 0x678ff
- 0前缀表示10进制,默认的是十进制
parseInt 格式化一个字符串转化为整型
例:
console.log(parseInt('123')); 123
console.log(parseInt('123.135')); 123
console.log(parseInt('123badgde')); 123
从左向右依次转化,直到遇到不是数字的字符停止,包括小数点。
例:
console.log(parseInt('badgde')); NaN
如果转化的是纯字符串或者第一位不是数字,那么返回的结果是NaN。
也可以将小数转化为整数,没有四舍五入,小数部分直接舍弃。
总结:
第一个参数是字符串或者数字,就是要被转化的量
第二个参数就是进制数(2,4,8,16,32)。不能大于32,表示前面的数字或者量是按照这个进制表示的
parseInt('0101001001',2);表示前面的数字是二进制数
parseFloat()
将字符串转化为浮点型或者将数字转化为浮点型,如果要转化的数字是一个整数,并且没有传递第二个参数,那么结果还是这个整数
NaN 不等于NaN的,同时NaN也不等于任何数。
例:
if(a){
console.log('is NaN');
}else{
console.log('is not NaN');
}
is NaN:判断某一个量是不是 NaN,如果是返回true,不是返回false。
inFinity
判断一个数字是否是有限的。如果是准确的数字,那么返回true。如果是NaN,或者InFinity或者-InFinity返回的false。
布尔值(Boolean)
里面只有两个值,一个是true (真),一个是false (假)
也可以理解成数学里面的0 和1 的关系,他描述的关系是否非此即彼的关系,常用判断,返回的都是布尔值。
取反符号(!)
改变布尔值的真假,取相反的意思。
如果使用了取反号(!)那么返回的值一定是一个布尔值
null
null 数据类型只有一个值,就是null
null数据的产生都是直接赋值为null
undefined
undefined数据类型也是只有一个值,就是undefined
undefined的产生分为四种情况:
-
一个申明了未赋值的变量就是undefined
-
函数的参数没有传递的时候,函数的内部就是使用的就是undefined
例:
function add(a,b){
console.log(a);
console.log(b);
console.log(a+b);
}
add(1);
-
函数没有返回值,但是调用函数返回结果的时候,这个结果就是undefined
例:
function add(a,b){
console.log(a+b);
}
console.log(add(2,3));
- 对象的某一个属性没有赋值
var zhangsan = {};
zhangsan.name = 'mimi';
zhangsan.age = 22;
console.log(zhangsan.name);
console.log(zhangsan.age);
console.log(zhangsan.sex); //undefined
null与undefined的区别
大部分情况下,null与undefined是一个意思
只有在转化为数字的时候不一样
例:
console.log(Number(null)); 0
console.log(Number(undefined)); NaN
语义上理解,null表示空,没有东西,undefined表示未定义。
字符串
定义一个字符串,必须要使用引号,单引号与双引号都可以,但是引号不能嵌套同一种引号。
引号不能包含同一个类型的引号,可以包含不同类型的引号,但是可以使用转义字符实现同类包含。
注意:
字符串定义的时候只能在一行定义,不能敲换行符号,但是可以使用转义字符来换行,后面直接加回车,不能加空白字符,换行之后的字符串也要顶格写。
转义字符(\):作用就是改变后面字符原来的意思。
字符串与数组
length的属性:知道数组内部局有多少个元素
例:
var al = [1,2,3,5,6,7,8,99]; length为8
al.length = 8;
al[7] => 99
或者 al[length-1]
字符串也可以通过下标的方式获取出某一个位置的字符
字符串和数组一样也具有一个length的属性,这个属性表示的是字符串的长度,包括空白字符
例:
var str = 'sgkhj hj gk';
console.log(str.length);
遍历字符串:用循环(while或者for)
例:var str = 'sgkhj hj gk';
for(var i = 0;i<str.length;i++){
console.log(str[i]);
}
计算输入的n个数字每一位数字加起来的和。
例如:123 = 1+2+3 = 6;
代码如下:
<script>
var s = '123';
var sum = 0;
for(var i = 0 ;i<s.length;i++){
console.log(typeof s[i]);
sum = sum + parseInt(s[i]);
}
console.log(sum);
</script>
弹窗
alert() 提示框 属于BOM
系统函数以及用户直接定义的函数都是属于window对象的
而window对象是属于BOM的顶层对象。docunment是DOM的顶层对象。
confirm:确认弹窗,当点击确定的时候返回的结果是true,点击取消的时候返回的是false,直接关闭也是false。
confirm一般用于判断里面,确认之后的操作是否执行
prompt()获取用户的输入
返回的是用户输入的内容,但是这个内容是字符串类型的。
练习:计算用户确认开始计算之后,用户输入的两个数字的和。
提示:用户确认开始计算:confirm
用户输入的数字: prompt
代码如下:
window.onload = function(){
var bool = confirm('是否开始计算');
if(bool != true){
alert('不算拉倒');
return false;
}
var a = parseInt(prompt('请输入第一个数字'));
while(isNaN(a)){
a = parseInt(prompt('请输入第一个数字'));
}
var b = parseInt(prompt('请输入第二个数字'));
while(isNaN(b)){
b = parseInt(prompt('请输入第二个数字'));
}
alert(a+'+'+b+'结果是:'+(a+b));
};
强制类型转换
1. parseInt:将数字或者字符串转化整型
2. parseFloat:将数字或者字符串转化为浮点型,如果转化的内容结果是整型,那么结果就是整型,不是浮点型
3. Number('内容'):结果只有两种一种是数字类型,一种是NaN。只要内容中有一个不是数字的字符,那么结果就是NaN
4. string:将内容转化为字符串类型。句式:string(转化内容);
当使用string转化null,undefined,布尔值的时候会直接讲这个原始的数据类型转化为字符串
5. Boolean:把内容转化为布尔值,把任何内容转化为true或者false
转为布尔值为false的情况:
1. undefined
2. null
3. false
4. 0
5. NaN
6. ''或者""(空字符串)[中间有内容会转化为true]
总结:
1. string类型:只要不是空字符串,都会转化为true
2. number类型:只要不是0,即使是负数,都会转成true
3. object类型:只要不是null类型,都会转换成true
4. undefined类型:都会转化成false
隐式类型转化
- 判断里面:结果转化为布尔值
eg:
1.console.log(1==2);
2.console.log(3>2);
3.if(){
}
4.while(判断){
}
- 具有字符串的加法:两边都要转化为字符串,就是字符串的拼接
- 数字与字符串比较大小:字符串转化为数字
- 减法运算的时候,字符串要转化为数字
技巧:快速的实现字符串转化为数字,减0运算
eg:
console.log(typeof (a-0));
网友评论