基本数据类型
number类型
整数(正整数,负整数,0),小数,NaN(not a number)
- 什么情况下是NaN?
- 做四则运算(±*/%)失败时
- 强制将其他数据类型转换成数类型失败时
console.log('a'-1)
// 字符串和数字做乘除减运算的时候会得到NaN
console.log(undefined+1)
// undefined和数字做任何运算都是NaN
Number('12a')
// Number()中只要有一个字符(不包含小数点)不是数字,则就是NaN
parseInt("a13")
// parseInt()和 parseFloat() 若首字符不是数字,则结果就是NaN
Number()
parseInt()
parseFloat()
- JS提供的三个强制转换的方法
Number()
将其他数据类型转换成数类型
特殊规律:
Number(true)//=> 1
Number(false)//=> 0
Number(null)//=> 0
Number(undefined)//=> NaN
Number("")//=> 0
其他字符串中,只要有一个字符(不包含小数点)不是数字,则就是NaN
parseInt()
将字符串中整数部分提取出来(从左往右一个一个提取,若首字符不是数字,则结果就是NaN)
parseInt("13a")//=> 13
parseInt("a13")//=> NaN
parseInt(".5")//=> NaN
parseInt("0.5a")//=> 0
parseFloat()
除了能提取整数部分,还能提取小数部分
parseFloat("13a") //=> 13
parseFloat("13.5a") //=> 13.5
parseFloat("a13.5")//=> NaN
parseFloat(".5")//=> 0.5
检测一个数是否是有效数?也就若不是NaN则就是有效数
"abc" "10a" [] {}
isNaN()
若结果为false则是有效数 ,若为true则不是有效数isNaN()方法实现的步骤:
- Number() ->整数小数或NaN
- isNaN(NaN)->true isNaN(整数或小数)->false
boolean类型
只有两种 true或false
Boolean()
强制将其他数据类型转换成boolean
类型
规律:只有五个(0,null,undefined,"",NaN)为false,其他全部为true
用途:
1.在条件判断那边需要强制转换成boolean类型
2.取反
if(10){}else{}
![] = !Boolean([])=!true=false
!![] = Boolean([]) = true
string类型
用单引号或双引号包裹起来的字符,叫做字符串
‘abc’ “abc”
- 字符串获取每个字符:
str.length
str[0]
- 字符串拼接:
10+"abc"
"10abc"
null+"abc"
"nullabc"
10+null+"abc"
"10abc"
- 字符串和变量的区别:
字符串带引号,变量不带引号,操作变量时,是操作变量对应存储的值
字符串中表示特殊字符:(转义)
\t(制表符) \r回车 \n(换行)
var str = "abcwEzsrextdryktuygliuhoi";
console.log(str.length);//字符串的长度
//通过下标能拿到每个字符,第一个字符的下标为0,最后一个字符的下标为str.length-1
console.log(str[0]);
console.log(str[str.length-1]);
//字符串拼接(把所有的字符靠一起)
var str1 = "abc";
var str2 = "def";
console.log(str1 + str2);// "abc"+"def"; "abcdef"
console.log( "abc"+"def");
console.log("aaa"+str1+"fff");//"aaaabcfff"
//var str3 = "ab'c"; //在双引号中能包单引号,但是不能包双引号
//var str4 = 'ab"c'; //在单引号中能包双引号,但是不能包单引号
console.log("ab\"c");
console.log('ab\'c')
console.log("ab\tc")
特殊数据类型
null和undefined
null 表示一个空对象指针,如果我们需要在以后使用一个对象,但现在没有值,一般情况下,会给他一个null值标识。
undefined 在使用var声明变量但未对其赋值的时候,这个变量的值就是undefined
null == undefined - >true undefined值是派生自null值,因此EAMA-262规定它们的相等性测试为true
null === undefined 严格比较(数据类型和值都得相等)->false
typeof 操作符
//js是弱类型的语言,变量的类型由值来决定
/*
* js里的数据类型:
* 基本类型的数据(值类型):number(数类型),string(字符串类型),boolean(布尔类型),null和undefined
* 引用类型的数据:对象类型(Object,Array,Math,Date,RegExp)和函数类型
*
* 通过typeof 检测数据类型
* */
var a;//变量没有赋值就是undefined
var num = 10;
var str = "abc";
var boo = true;
var reg = /\d/g;//RegExp
var ary = [];//Array
var obj = {};
var n = null;
var fn = function(){};
//console.log(typeof num);//"number" 会把检测的结果放入引号里输出
console.log(typeof str);//"string"
console.log(typeof boo);//"boolean"
console.log(typeof reg);//"object"
console.log(typeof ary);//"object"
console.log(typeof obj);//"object"
console.log(typeof n);//"object" 特殊的
console.log(typeof fn);//"function"
//instanceof检测对象的细分类型 检测一个对象是否属于这个类
console.log(reg instanceof RegExp);//true
console.log(ary instanceof Array);//true
//constructor 指向所属的类
console.log(ary.constructor) //Array()
//Object.prototype.toString.call(n)
console.log(Object.prototype.toString.call(n));//"[object Null]"
console.log(typeof typeof typeof 10);//'string'
//过程分析
console.log(typeof 10);//"number"
console.log(typeof "number");//"string"
console.log(typeof 'string');//'string'
//alert(a);//变量未定义直接使用会报错
//console.log(a);
var str = a+10;// a is not defined
// console.log(typeof a);//变量未定义去运算则结果为undefined
引用类型数据
-
对象
- Object、 Array、RegExp、Math ……
-
函数
- Function、Class ……
基本类型数据和引用类型数据区别:
基本类型数据也称为值类型的数据,因为每次只能存储一个值(一种类型的值)
var num = 10;
var str = "abc"
- 由来:若需求复杂了,需要从多方面去描述一个事物,这时对象类型的数据才能满足我们的需求
- 概念:是多种数据类型的复合载体,是由多个键值对(属性名和属性值)组成,属性名和属性值之间以:隔开,每个属性之间以逗号隔开
var money = {price:1,width:"100px",height:"50px",color:"green",fn:Function(){}}
把属性名理解成变量名,属性值理解成值 :相当于 = 赋值的意思 - 定义两种:
- 对象直接量的方式 {}
- 构造函数的方式 new Object()
- 操作对象:增删改查
- 打
.
的方式 []
的方式 (类似于数组的表示法)[]
里放的是属性名
- 打
- 对象的细节知识点
- 属性名可以是数字 只能以
[]
方式获取 - 若属性不存在,获取值时为undefined
- 若
[]
里的引号忘记写了,则[]
里表示的是变量,若变量没有定义,则会报错 - 若变量有值,则先找变量存储的值,然后再去对象中找变量存储值(属性名)的属性值
- 属性名可以是数字 只能以
Object
// var person = {
// name: '小明',
// age: 18,
// sex: "男",
// hobby:{
// hobby1: 'play snow',
// hobby2: 'play game'
// }
// }
// console.log(person);
//
// person['name'] = '小红';
// console.log(person);
//
// var a = 13;
// var b = a = 12;
// b = 15;
// console.log(a,b);
//
// var obj1 = {x:5};
// var obj2 = obj1;
// obj1 = obj1.a = {x:1};
// console.log(obj1.a,obj2.a);
// 'name' in person
var person = {
name:'小明',
sex:0
};
for(var key in person){
console.log(key)
if(key == 'sex') {
person[key] = person[key] == 0 ? '女' : '男';
}
}
// console.log(obj1.x,obj2.x);
Array
var ary = [1,2,3,4];
// var ary2 = ['a','s','r'];
// console.log(typeof ary);
// console.dir(ary);
var obj = {0:1,1:2,2:3,3:4};
obj[1];
ary[1];
console.log(ary)
ary[0] = 10;
ary.push(9);
ary.push(10);
ary.unshift('p')
ary.pop()