javascript数据类型

1.变量的声明和赋值

什么是变量?

字面理解为可以变化的量

变量是用于储存信息的容器也叫内存空间 是一段命名的存储空间 在程序运行过程中值允许改变变量的值 是由变量名,变量值,和变量类型组成,运算符

变量命名规则

第一个字符必须是字母,_或$,后面的字符还可以是数字 

严格区分大小写并且要有一定的含义(别人看到就可以理解变量名的意思)

建议使用小驼峰命名法。(redApple)

取变量名不能使用关键字,保留字作为变量名

变量的命名和赋值

1,var 变量名

        变量名=值

var num1
    num1=10

2,var 变量名=值

var num1=10

3,变量名等于值

num1=10

4,var 变量1=值1,变量2=值2,变量3=值3

var num1=10,num2=20,num3=30

注意:

  • 变量名是浏览器关闭后才释放在,在没关闭之前随时使用

  • 重新声明的变量,不会丢失原始值,除非重新赋值

  • 换行是语句的结束,最好结束时都加上 “ ; ”

  • 变量名是区分大小写的

JavaScript的数据类型

分为两种:原始类型(即基本数据类型)和对象类型(即引用数据类型);

js常用的基本数据类型包括

undefined - - (未定义)、null- - (空的)、number - - (数字)、boolean- - (布尔值)、string- - (字符串)

js的引用数据类型也就是【数组,对象,函数】

对象类型Object- - (对象),比如:array - - (数组)、function - - (函数)、data - - (时间)等;

JS为弱类型语言,不必声明数据类型,而是在使用或赋值的时候确定其类型 基本数据类型存放在栈中 引用数据类型存放在堆中【讲完类型后面详细说堆和栈】

强类型语言/弱类型语言

强类型语言【java】:

  • 要求变量的使用要严格符合定义,所有变量都必须先定义后使用。

  • 一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了

弱类型语言【js/python/php】:

  • 它与强类型定义语言相反, 一个变量可以赋不同数据类型的值

对象类型

  • 本地对象:string,Array,Date,Math,Golbal,独立于宿主环境的ECMAScript实现提供的对象

  • 宿主对象:DOM,BOM。ECMAScript中的‘宿主’就是我们网页的运行环境,即‘操作系统’和‘浏览器’

判断数据类型

  • Typeof

可以通过typeof运算符来判断数据类型

  • instanceof

判断是否为数组(typeOf 肯定不行咯,返回的是object)

var ary = [1,2,3,4];
console.log(ary instanceof Array)//true;
  1. String类型【重要】

js中用来表述文本的数据类型

  1. 字符串用单引号或双引号包括起来

  2. 单双引号均不能解析变量

  3. 变量与字符串,变量与变量之间可以使用运算符‘+’来链接

  4. 单引号和双引号可以互相嵌套,如果单引号中要嵌套单引号,需要使用转义字符

转义字符

注意:

  1. \n换行(在alert中生效)

  2. 8进制表示法【进行两次转换,这里面的数字是ASCII中表示的八进制数字】

  3. 16进制表示法

  4. 16进制unicode表示法

console.log('\062') //八进制50  对应的值:2

Number

按照进制划分:二进制、八进制、十进制、十六进制

按照其他划分:整形、浮点型、NaN(not a number)

js中所有的数字是以IEEE-75标准格式表示的,浮点数的精确问题不是js特有的;

因为有点小树以二进制表示位数是无穷的

整形: 0,6,-100,0xff00(十六进制),0377/0o77(八进制),0b1010(二进制),不管输入的是几进制,最终显示时都会转为10进制

浮点型: 1.2,0.123,3.14e11=>3,14*10^11 科学计数法

0.375+0.248.toFixed(2)=>保留两位小数(四舍五入)
console.log(1.0-0.9==0.1)//false
console.log(1.0+0.9==1.9)//true

NaN(not a number): NaN是一个特殊的number值,not a number表示非数字,当程序由于某种原因计算错误时,将产生一个无意义的数字NaN NaN与任何值都不想等,包括NaN本身 任何涉及NaN的操作,结果都为NaN

var a='hello';
b=10;
alert(a-b)  // NaN

Boolean

  1. 值只有true和false。分别代表逻辑真与假

  2. 布尔值通常用来表示比较所得的结果

  3. true和false是严格区分大小写的

var n=10;
if(n>8){
    alert('我是true');
}else{
    alert('我是false');
}

undefined【了解】

  1. 定义了一个变量但没有为该变量赋值,使用了一个并未赋值的变量

  2. 使用了一个不存在的对象的属性时

var n;
alert(n);
var people=new Object; // 创建一个object对象
people.height =162;  // 添加属性height
alert(people.height);  // 输出属性height
people.show=function(){  // 添加方法show
  alert(this.color);   // 调用属性color
  alert(this.height);  // 调用属性 height
}
people.show()  // 调用方法show

null【了解】

  • null表示一个空值

  • null不等于空字符串""、''或0

  • null和undefined的区别是,null表示一个变量被赋予了一个空值,而undefined则表示该变量尚未被赋值

console.log(null == null) // true
console.log(NaN == NaN);  // false
console.log(undefined == undefined); // true

Array(数组)【重要】

数组中存储的数据,都有自己的编号,编号从0开始,依次递增1(下标/索引/编号)

将来可以利用有序的索引获取数据

创建数组

方法一:

var 数组名=new Array();

方法二:

var cars=new Array("Audi","BMW","BYD");

方法三:

var cars=["Audi","BMW","BYD"];

获取数组中的值

var arr = ['少林寺','龙门石窟','二七塔','华谊电影小镇'];
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
console.log(arr[3]);

循环遍历输出所有的数据

var cars=new Array("Audi","BMW","BYD");
for(i=0;i<cars.length;i++){
  document.write(cars[i]+"<br/>")
}

多维数组

var arr = [
  ['北京','上海','深圳'],
  ['合肥','石家庄','昆明'],
  ['','','']
];
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
console.log(arr[3]);

    Object 对象【重要】

    作用:用于描述一个物体的特征和行为

    对象:是一个可以存储多个数据的容器。

    面向过程:按照时间的发生顺序,从上往下依次执行
    对象对象:指挥对象做某件事情

    对象:

    属性:本身所拥有的特性

    方式:能做的事情

    对象:

    { },使用{ }包括起来的都是对象

    [ ],使用[ ]包括起来的都是数组

    创建对象:

    方法一:var 对象名称 = new Object();

    方法二:var 对象名称 = {'键':‘值’,'键':‘值,'键':‘值,'键':‘值};

    创建对象

        // 车
        var car = new Object();
        // 属性
        car.color = 'red';
        car.brand = 'BMW';
        car.price = 28.5;
        // 方法
        car.run = function(){
            console.log('我能跑');
        }
        car.stop = function(){
            console.log('我能停止');
        }
        car.setSpeed = function(){
            console.log('我能定速巡航');
        }

    获取对象中的属性和方法

    // 调用整个对象
    console.log(car);
    // 类似数组的方式调用
    console.log(car['color']);
    console.log(car['price']);
    // 使用对象的方式调用
    console.log(car.color)
    console.log(car.price); 
    // 调用对象里面的方法
    car.run();

    使用第二种方式:创建人的对象

    var obj2 = {
        // 定义属性
        'name':'jack',
        'sex':'男',
        'age': 18,
        // 创建方法
        'eat':function(){
            console.log('我能吃');
        },
        'sleep':function(){
            console.log('我能睡觉');
        }
    };
    // 获取对象中的数据:对象名.属性名
    console.log(obj2);
    // 调用属性
    console.log(obj2.name);
    // 调用方法
    obj2.eat();
    JS的严格模式【了解】

    在js中存在一个严格模式,使用 use strict来定义;这个是ES5中新增加的;

    "use strict";
    x = 3.14; 
    console.log(x);

    "严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它

    另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。

    数据类型的检测

    数据类型转换

    自动转换:js会通过关系运算符,逻辑运算符,算数运算符,if语句等实现隐式转换

    根据需要自动进行类型转换,但是转换时会遵循一定的规则

    强行转换->通过内置对象的方法强制转换,比如:parseInt(),parseFloat(),Number(),String(),Boolean(),toString()

    转为字符串【掌握】

    自动转换3

    类型转换字符串型后的结果
    numberNaN、0、或数值对应的字符串
    null"null"
    boolean"true"、"false"
    undefined"undefined"
    object若对象存在为其toString()方法的值,若对象不存在为"undefined"

    强制转换: String(),object.toString()

    练习:

    00123=?
    0+'123'=?
    123+'100'=?
    1+'2abc'=?
    null+'12abc'=?
    console.log(Number([])); // 0
    String(undefined)=?
    date=new Date()
    date.toString()=?
    转为数字类型【掌握】

    自动转换

    类型转换为数字型后的结果
    string若内容为数字则为相应数字,否则为NaN
    null0
    booleantrue转为1,false转为0
    undefinedNaN
    objectNaN

    注意:数学运算(特殊情况:+再出现字符串的情况下不是数学运算,而是字符串的拼接)

    强制转换 Number()

    按照自动转换规则转换 parseInt(string) 、parseFloat(string)

    isNaN() 函数用于检查其参数是否是非数字值

    注意:parseInt还可以接受第二个参数(2到36之间),表示呗解析的值的进制,返回该值对应的10进制数。parseInt的第二个参数为10,即默认是十进制转十进制

    parseInt('1000'); // 1000
    // 等同于
    parseInt('1000',10); // 1000
    parseInt('1000',2); // 8
    parseInt('1000',6); // 216
    parseInt('1000',8); // 512

    练习:

    console.log(0x2f); 
    console.log(061); 
    console.log(Number(null)); 
    console.log(Number(undefined)); 
    console.log(Number('123.12')); 
    console.log(true+123); 
    console.log(Number('123abc')); 
    console.log(parseInt('012.6a23b')); 
    console.log(parseFloat('a12.6a23b'));
    console.log(parseInt(true));
    转为布尔类型【掌握】

    自动转换

    类型转换布尔型后的结果
    ""或''FALSE
    0或0.0FALSE
    NaNFALSE
    undefinedFALSE
    nullFALSE
    其它TRUE

    强制转换 Boolean(), !!

    练习:

    
    
    if(0 || "" || '' || NaN || undefined || null){
      alert('true')
    }else{
      alert('false')
    }
    !!123.11  // true
    Boolean('abc') // true
    console.log(Boolean([])); // true

    特殊案例

    console.log(Boolean([])); // true
    console.log([] == false);   // true; ==两边的数据类型不一致,需要转为数字进行比较;[]=>字符串''=>数字0
    console.log(![] == false); // true  ==的优先级比较低,肯定是先算左边 ![] 然后与后面进行比较,[]转为布尔值为true 取反 false false==false
    console.log('0' == false); // true

    在==比较的过程中,数据转换的规则 类型一样的几个特殊点:

    {} == {} false,对象对比的是堆内存的地址

    [] == [] false

    NaN == NaN false

    类型不一样的转换规则:

    1. null == undefined true,但是换成 === 结果是false(因为类型不一致),剩下null/undefined和其他任何数据类型值都不相等

    2. 字符串 == 对象,要把对象转为字符串

    3. 剩下如果 == 两边数据类型不一致,都是需要转换为数字再进行比较

    如果类型都是字符串,就会按照ASCII编码的进行对比

    运算符

    表达式
    常量 1.2   'str'  false
    变量 x  y
    复合 x+1

    操作符:表达式 x+1中的x,1为操作符 运算符:表达式x+1的,+为运算符

    11.1 算术运算符(+,-, *,/,%【重要】,++【重要】,--)
    1. “+”算数加和字符串想接 i++ 先赋值,再加1;++i 先加1,再赋值

    // 实现各行换色效果
    for(var i=1;i<=10;i++){
      if(i%2==0){
          document.write("<font color='red'>"+i+"</font>");
      }else{
          document.write("<font color='green'>"+i+"</font>");
      }
    }

    注意:正号有隐式类型转换功能

    alert(typeof(+'5'))  // number

    11.2 比较运算符(>,<,>=,<=,==,!=不等于,!==不全等于)【了解】

    专门用作判断,返回值结果为boolean

    console.log(1.2+1.1==2.3) //true
    console.log(1.2-1.1==0.1) //false

    总结:比较运算符的结果是boolean类型

    11.3 赋值运算符(=【掌握】,+=【掌握】,-=, *=,/=,%=)

    = 赋值运算符

    
    
    
    var a = 10;
    var arr = ['张三','李四','王武','孙刘','马奇'] 

    表示给num+1,再把相加之后的结果赋给num这个变量

    
    
    
    var i=10;
    i+=1 // i=i+1 效果一样  i++

    使用场合:累加求和,字符串拼接

    11.4 逻辑运算符(!,&&,||)【两边均为表达式】【重要】
    运算符解释
    !逻辑取反
    &&逻辑且;只有两个操作数都为 true 时,才返回 true,否则返回 false。
    ??(了解)空值合并运算符,如果左侧的表达式为 null或者 undefined 时,返回其右侧表达式,否则返回左侧表达式。

    逻辑运算符用于测定变量或值之间的逻辑

    || 存在断点问题,第一个式子成立,不在执行第二个式子;如果第一个式子不成立,执行第二个登式(真假为真,假假为假,真真为真)

    && 存在断点问题,如果&&前面的值为false,后面的不再运行

    &&式子两边同时成立,执行的是if(true),只要有一个不成立。或两个都不成立执行false

    ||运算方法[真前假后]:

    
    
    
    只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
    只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。

    &&运算方法:

    
    
    
      只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
      只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

    案例:

    
    
    
    if(0 && 5){
      console.log('真');
    }else{
      console.log('假');
    }
    console.log(10&&5);
    console.log(0&&5);
    var a=1;
    console.log(a>5 && a++);
    console.log(a<5 && a++);
    console.log(a<5 && --a);
    var a=10;
    if(a<20||a++){
      console.log('真',a);
    }else{
      console.log('假',a);
    }

    使用技巧:|| 或 运算符使用技巧

    
    
    
    // 如果你必须给一个变量赋默认值,可以简单的这样写
    var a;
    console.log(a) // undefined
    a = a||'default value';
    console.log(a)  // default value
    a = a||'new value';
    console.log(a)  // new value
    // 在函数中传參使用,如果传參就使用传递过来的参数,没有传參就使用默认值
    function show(10){
      var shownum = num || 20;
      console.log(shownum);
    }
    show(10);

    思考:

    
    
    
    console.log( 0 || 1 ); // 1
    console.log( 1 || 2 ); // 1
    console.log( 0 && 1 ); // 0
    console.log( 1 && 2 ); // 2

    11.5 条件运算符【三元运算符/三目运算符】【重要】

    条件表达式?结果1:结果2 如果条件表达式结果为true则返回结果1 如果条件表达式结果为false则返回结果2

    
    
    
    var m=100>99?66:33
    alert(m)

    案例:判断某个年份是否为闰年

    1. 运算符的优先级

    下表按从最高到最低的优先级列出JavaScript运算符。具有相同优先级的运算符按从左至右的顺序求值。

    小括号>算术运算符>比较运算符>逻辑运算符>赋值运算符

    1. JSON数据类型

    JSON:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式 主要作用: JSON 是用于存储和传输数据的格式。 JSON 通常用于服务端向网页传递数据 。 特性: json的键不能重复,如果键是一个完整的单词,可以直接写,如果键里面包含了空格,要用引号引起来 格式:

    {key: value, key: value}
    数据为 键/值 对。
    多个数据由逗号分隔
    value可以为任意类型

    定义复杂的json格式

    
    
    var address = {
        "city":"成都",
        "province":'四川',
        "aaa":{
           "name":'Test',
           "value":{
               "value":"123"
           }
         },
         "bbb":[{
           "name":"lisi"
         },{
           "name":"zhangsan"
         },{
           "name":"wangwu"
         }]
    };

    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值