数据类型

基本数据类型

number类型

整数(正整数,负整数,0),小数,NaN(not a number)

  1. 什么情况下是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()方法实现的步骤:

  1. Number() ->整数小数或NaN
  2. 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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值