Js的数据类型有哪些?
- Js中的原始类型:number,string,boolean,null,undefined,object
- undefined:
- 1.变量声明了,但是没有赋值
- 2.函数没有明确返回值,结果接收了
- Null:表示的是一个空的对象,所以浏览器返回的类型为object
- undefined:
Numbe类型
-
有范围最大/最小值
console.log(Number.MAX_VALUE)再往后加值不会变console.log(Number.MIN_VALUE)- 无穷大(Infinity)/无穷小(-Infinity)
-
NaN (不是一个数字)
- 要验证是不是NaN,使用isNaN,如果是数字具返回false,不是数字返回true
console.log(isNaN(num+10))//true
-
注意:
-
不要用小数去验证小数,本身语言的bug
var x=0.1;var y=0.2; var sum = x+y; console.log(sum ==0.3) //false2.不要用NaN验证NaNundefined+10 == NaN //false
-
字符串(String)
- 字符串的长度:name.length
- tab键:水平制表符
- 转义符:\
console.log(“哈哈\”lala”)// 哈哈\”lala - 浏览器自动把字符串转换为数字,或者转换为其它的,称之为隐式转换
类型转换:
- 其它类型转数字类型
parseInt()转整数
console.log(parseInt(10a)) //10 Console.log(parseInt(a10)) //NaN
parseFloat()转小数
console.log(parseFloat(10a)) //10 Console.log(parseFloat(10)) //10
Number()转数字 比较严格
console.log(Number(10a)) //NaN Console.log(Number(10)) //10
- 其它类型转字符串类型 .toString()
Var num = 10;
console.log(num.toString()); //主动 变量有意义调用,使用.tostring调用
console.log(String(num));//被动
如果变量没有意义调用,使用string调用会报错 如:(undefined null 两者都会报错
- 其它类型转布尔类型
- 非空字符串转boolean都是true
console.log(Boolean(“山水”)); //true - 没有意义的是false
Console.log(Boolean(null)) //false;
- 非空字符串转boolean都是true
Js对象
对象:有属性和方法,具体特指的某一事物
- 面向过程:什么事都要自己一步一步的做,注重的是过程
- 面向对象:把自己的需求提出来找人去做,注重的是结果
- 面向对象的特性:封装、继承、多态(可以创建对象,js可以模拟创建对象)
- Js对象不是面向对象的语言,是基于对象的语言,具有封装的特性(封装:把值给变量 把变量给数组,把很多代码给函数都叫封装),因为js没有类 所以就没有继承 多态也没有 它不具有这些特性,但是可以模拟,
遍历对象使用 for (var key in json)
- key是键名 json[key]是值
- 如果直接使用json[key] 这个key属性不存在的话就会给json添加了一个名为key的属性

string与String的区别
- string是字符数类型
- String是系统内部的构造函数,是一个对象,用来创字符串对象的
- 字符串可以看做成由字符组成的数组(js中没有字符,在别的语言中字符只有一个并且使用单引号),可以使用for遍历,并且有索引,但是字符串的特性是不可改变的,值不能改变 只能只读。
var str = “hello”,str[1]=“w”;//hellostr=“你好” //你好- 这个代码是看起来改变了,其实只是重新进行了赋值,在内存中重新开辟了一个空间,指向的地址已经发生了变化 所以字符串的缺点也出来了 改变一次重新在内存开辟一次空间 占用内存较多
实例方法:必须通过new来创建的对象(实例对象)来调用的方法
静态方法:直接通过大写的构造函数的名字调用的方法 (Math.PI)
内置函数Sting的使用
var str="sweesd";
console.log(str.length);
console.log(str.charAt(1));//w 返回索引对应的元素
console.log(String.fromCharCode(65));//返回asii码对应的的字符串
console.log(str.concat("DWE","dsed","d"))//拼接字符串
//输出这个字符第一次出现的索引(位置),如果没有返回-1
console.log(str.indexOf("e"));
//输出右边第一次出现的字符的索引,但是位置还是从左往右算的,没有返回-1
console.log(str.lastIndexOf("e"));
//("被替换的字符",“替换成的字符”,“从哪个索引位置开始(可有可无)”)
console.log(str.replace("e","l",0));//swlesd
//截取字符串,第一个数字代表开始的位置,第二个代表留下的个数
console.log(str.substr(1,5))//eesd
//从索引2开始到索引5结束,但是截取成的新的字符串不包含第五个索引对应的字符
console.log(str.slice(2,5));//ees
//同slice功能都是截取类似,也都可以省略第二个参数
console.log(str.substring(2,5));//ees
//根据w来分割字符串,并w切割掉,后面跟数字代表的是切割留下的个数
console.log(str.split("w",2));//s eesd
console.log(str.toLocaleLowerCase(str));//转小写或者toLowerCase(str)
console.log(str.toLocaleUpperCase(str));//转大写或者/toUpperCase(str)
str=" sddc ";
console.log(str.trim(str))//修剪掉两边的空格
var arr=[10,23,21,45];
//截取字符串并返回新的字符串 1代表开始的索引 3代表结束的索引
var newArr= arr.slice(1,3);
console.log(newArr);//23,21
//里面有三个参数 开始插入的位置 删除的个数 插入的元素
arr.splice(2,1);
console.log(arr);//10,23,45
arr.splice(1,0,60);
console.log(arr);//10,60,23,45
基本包装类型
-
基本变量不能直接调用属性和方法 对象可以直接调用和使用
-
基本包装类型:本身是基本类型,但是在执行的过程中调用了属性或者方法后就不再是基本类型了, 而是基本包装类型,基本变量也变成了基本包装类型对象
var str = "sww"; //基本类型var newArr = str.replace("ww","ll");//基本包装类型//基本类型不是基本包装类型 这只是简单的转换 没有newvar num = Number("10");//基本包装类型var num1= new Number("10"); -
基本类型弊端:
//基本包装类型 如果这个对象&&true 结果就是true 结果就是&&后面是什么就什么
var bool = new Boolean(false);
var bool1 = bool&&true;//true
//如果是true&&对象 那么结果就是对象
var bool2= true&&bool;//Blooean{false}
获取变量的数据类型:typeof Instanceof
- typeof是说明是那种数据类型
Console.log(typeof num);结果都是以字符串的方式显示出来
- Instanceof是判断这个函数是否属于某种类型 返回的是布尔类型
- num Instanceof