day02
js数据类型
- 数据类型是弱类型,即最开始不知道变量是什么类型,必须通过后面的数值才能知道
- js数据类型有两大类
- 基本数据类型
- number
- string
- Boolean
- null 空
- undefined 未定义
- 引用数据类型(复合数据类型)
- object
- object
- array
- function
- object
- 基本数据类型
number
- 就是数值
//整数
var a=1;
//小数
var b=2.5
//八进制 以0开头,并且没有超过8的数,就是八进制
var c=0101
//十六进制 以0x开头,就是十六进制:0-9 + a-f
var d=0xa
//typeof可以检测变量类型,有两种写法:typeof 变量名;typeof(变量名);
console.log(typeof 2+3);
//控制台显示: number3
//因为在这里,+变成了连接符号
//可以写成下面:
console.log(typeof(2+3));
//这样会优先执行括号里的
console.log(0.1+0.2);//这里得到的结果并不是0.3
禁止使用小数运算去判断真假,因为极个别的小数计算结果会有偏差
string
- 就是字符串,用单引号或者双引号引起来,只要放在引号里面,就都是字符串
var a='123'
var a='qwertYuii'
var a='李峥是个仙^(* ̄(oo) ̄)^'
//相同的变量名,后面的会覆盖前面的
- 字符串中有一个数量:length,它用来获取字符串的长度。
语法:变量名.length
var a='qwertyuioplk';
console.log(s.length);//12
//获取字符串某一个字符,从0开始
console.log(a.chareAt[0]);//q
//[0]是索引值,从0开始,必须是整数
Boolean(布尔,true false)
- 非假既真,真为true-1,假为false-0
if(10>20){
console.log(true);
}
null
- null表示空值,但是控制台显示的是object
console.log(typeof null);//object
undefined
- 标识变量还没有初始化,未定义
var a;
console.log(a); //undefined
object
- 复合类型中有:object array function
object
- 万物皆对象,页面中获取的所有元素标签都是对象类型
console.log(typeof document); //object
console.log(typeof window); //object
-
声明对象
-
空对象:
var obj={} //这就是一个空对象
-
通过关键字new实例化对象
var obj=new Object(); console.log(typeof obj); //object
-
直接声明对象
var obj={name:"lizheng",age:18,sex:"女"} //查看变量类型 console.log(typeof obj);//object //获取属性值 console.log(obj.name); //lizheng //改变属性的值 console.log(obj.name="zhutou"); //增加属性值 console.log(obj.emile="www@.com");
在object数据类型中,存储值时,通过键值对的形式存储的(name:"lizheng"),其中name为键名(属性名),"lizheng"为键值(属性值)。
-
array
-
数组可以将多个数据存储到一块,数组里面没有类型限制
-
声明数组的方法
-
用new关键字实例化
var arr=new Array();
-
var 变量名=[]
var arr=[]; //这是一个空数组 var arr1=[1,'fd',[1,23],{"name":"lizheng"}]; //查看它的变量类型 console.log(typeof arr1); //object //获取元素个数,长度 console.log(arr1.length);//4 //通过下标获取某个具体数据,下标从0开始 console.log(arr1[2]);//1,23 //改变数据内容 arr1[1]=123; //插入数据 arr1[10]="wowowow"; console.log(arr); //结果:[123,'fd',Array(2),{...},empty*5,"wowowow"] arr1.push("111"); //会直接加载arr1[10]的后面
数组允许通过下标插入数据,允许数组当中某些下标为空
push往数组末尾添加元素
-
function
-
声明函数
-
匿名函数:
function(){ }
-
命名函数:
function 函数名(){ }
1: function fun(){ } console.log(typeof fun); //function 2: function fun(){ console.log(fun);//下面调用几次这里就会执行几次 } fun();//调用fun();//调用fun();//调用
-
数据类型的强制转换
转数值类型方法一:Number() 返回一个新的值,不会改变变量原有的值
-
语法:Number()
-
string转换为number
-
console.log(Number(’’)); //0
-
console.log(Number(‘123’)); //123
-
console.log(Number(‘123asd’)); //NaN
-
console.log(typeof NaN); //number
-
console.log(Number(‘0.1.2’)); //NaN
-
console.log(Number(‘0.12’)); //0.12
-
console.log(Number(’.12’)); //0.12
-
console.log(Number(‘QQ123’)); //NaN
字符串转数值,空的转为0,纯数字的转成对应的数值,可以识别一位小数点而且必须是纯数字,其他的全部转成NaN
-
Boolean转换为number
-
console.log(Number(true)); //1
-
console.log(Number(flase)); //0
-
null转换为number
-
console.log(Number(null)); //0
-
undefined转换为number
-
console.log(Number(undefined)); //NaN
-
console.log(NaN == NaN); //flase 不知道是什么成为的NaN
-
console.log(1 == ‘1’); //true 隐式类型转换
-
console.log(1 == true); // true
-
console.log(null == ‘’); // false
-
console.log(’’ == 0); // true
-
console.log(0 == null); //false
-
隐式转换,有和数值比较的其他类型,会把别的类型转换为数值的
JS规定:null和undefined属于无值类型,谁和他俩比较都是Flase,只有自己和自己比较的时候是true
-
转数值类型方法二:parseInt() 整型
- 识别字符串里以数字开头的连续性的值转成对应的值
- console.log(parseInt(‘123’));//123
- console.log(parseInt(‘123.234’)) ; //123
- console.log(parseInt(‘123asd’)) ; //123
- console.log(parseInt(‘0123asd’)) ; // 123
- console.log(parseInt(‘0.123asd’)) ; // 0
转数值类型方法三:parseFloat() 浮点型
- 识别字符串里以数字开头的连续性的值,可以识别一个小数点
- console.log(parseFloat(‘123’)) ; //123
- console.log(parseFloat(‘0.as123’)); //0
- console.log(parseFloat(‘a0.as123’)); // NaN
其他:isNaN 不是一个数值,是数字就返回false,不是数字就返回true
- console.log(isNaN(‘123q’)) //true
其他类型转换为字符串
-
String(要转换的对象)
-
console.log(String(123)); //‘123’
console.log(typeof String(123)); //string
-
console.log(String(true)); //‘true’ ‘false’
-
console.log(String(null)); //‘null’
-
console.log(String(undefined)); // undefined
-
var arr = [1,‘a’,[‘asd’]];
var str = String(arr)
console.log(typeof str); // ‘1,a,asd’
-
// var obj = {“name”:“ujiuye123”}
-
// var obj = {“name”:“ujiuye123”,“age”:“12”}
-
var obj = {};
-
var str1 = String(obj) // [object object]
-
console.log(str1)
-
console.log(str1.length)
-
console.log(typeof str1)
对象(object)不可以转换为字符串,其他的都可以
-
-
要转换对象.toString()
-
var x = 234;
console.log(x.toString());
-
var y = 13;
console.log(y.toString()); // ‘2’
console.log(y.toString(16)); // b
toString()中,括号里面写的是2-36的数值,写多少就可以转换为几进制
-
运算符
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 三目运算符(三元运算符)
算术运算符(+ ,- ,* ,/ ,% ,++ ,–)
-
-
console.log(1+2); //3
-
console.log(1+‘a’); //1a
这里需要注意,当加号后面不是数值的时候,加号就会变成连接符
-
-
减号、乘号,除号,取余就是一般的,嗯,没啥注意的吧
-
–(自减)和++(自增)
-
他有放在前面和放在后面两种
- 放在前:先运算再赋值
- 放在后:先赋值再运算
-
var x=3;
var y=x++;
console.log(x,y); //4,3
因为++在后面,所以先赋值再自增
-
var x=5;
var y=–x;
console.log(x,y); //4,4
因为–在前面,所以先自减再赋值
-
-
/ 0也可以计算
- console.log(10/0); //Infinity 无穷
- console.log(0/0); //NaN
-
加减乘除取余都可以隐式转换
赋值运算符(==,+=,-=,*=、/=)
- x+=2 ----> x=x+2
- x-=10 ----> x=x-10
比较运算符(== , < , > , <= , >= , != , === , ! ==)
-
console.log(10 == ‘10’); //true
-
console.log(10 != ‘10’); //false
-
console.log(10 === ‘10’); //false
-
console.log(10 !== ‘10’); //true
-
’ == ‘只比较数据的大小,’ = = = '比较的不仅是数据的大小,还有数据类型是否一样
-
console.log(’’ == ‘’); //true
-
console.log([] == []); //flase
-
[]和[]的地址不一定相同。
-
浅拷贝
-
var arr=[1,2];
var arr2=arr;
arr2[2]=4;
console.log(arr); //[1,2,4]
arr和arr2是公用的同一个地址,所以arr2改变数组内容,arr中也会改变
console.log(arr=arr2); //true
-
逻辑运算符(与&&或||非!)一般用在流程控制条件判断中
-
空为假,非空为真
-
0为假1为真
-
var str=’’;
console.log(str); //false
三目运算符(三元运算符)
-
条件?语句一:语句二;
-
如果条件成立就执行?后面的语句,如果条件不成立就执行:后面的。
-
var s=10;
s<0 ? n=10 :n=0;
console.log(n); //0
运算符的优先级:
()>!>算术运算>比较运算>逻辑运算
typeof返回那些字符串?
- number
- string
- boolean
- undefined
- object
- function