2019-06-24JavaScript的数据类型

前头的话:

算是重学吧,以前只图快,加上不爱写博客,忘得差不多了!这一系列文章是跟着w3school文档撸的,只是为了让自己手抄一遍,加深记忆,非完全原创。

JavaScript语言与Java语言的关系:类似于雷锋与雷峰塔的关系。

什么是语言:

计算机是一个由人来控制的机器,人要他干啥它就得干啥。那么人如何告诉计算机该去干嘛呢?——语言
语言的发展:
纸带机:机器语言——汇编语言:符号语言——现代语言:高级语言

JavaScript简介

JavaScript诞生于1995年,用于网页的前端验证,所谓前端验证就是指检查用户输入的内容是否符合一定的规则(例如用户名或者密码的长度,邮箱的格式),但时至今日,网页上所有的动态效果全由JavaScript完成


image.png

有空看看书——《浪潮之巅》
ECMAScript只是定义了标准,由各大浏览器厂商去实现,每个厂商分别用不同的JS引擎去实现。以谷歌用的v8速度最快。

JavaScript的组成:BOM,DOM,ECMAScript。这三部分也是我们要学习的内容

JS的特点:

解释性语言:写完了直接运行,不用去编译
类似于 C 或Java的语法结构
动态语言:变量可以保存仁和类型的值
基于原型的面向对象:(学习的主要关注点)

JS编写位置

所有的语言都是在向计算机发命令,要么,我们JS的命令是写在哪儿的呢?
我们的JS代码写在网页中,用一个script标签包裹起来。script标签可以写在head标签中,可以写在body标签里面,也可以写在整个文档的最后面,也可以写在一些标签的一些属性(如button标签的onclick,a标签的href属性)里面(不推荐,属于行为和结构的耦合,不方便维护),也可以单独的建立一个script文件,在需要使用的html文件里通过标签引入、也可以利用浏览器的缓存机制(推荐使用方式)。
script标签只要是用于引入外部script文件了,里面写的JavaScript代码浏览器不会解析。




    
    Title
    
    


    
这是一个超链接 这是一个超链接

注意,JS代码是从上到下依次解析执行的。
我们上面的例子中的语句又可以叫做输出语句。

JS输出

JavaScript 不提供任何内建的打印或显示函数。

  • window.alert() 写入警告框
  • document.write() 写入 HTML 输出
    在 HTML 文档完全加载后使用 document.write() 将删除所有已有的 HTML
  • innerHTML 写入 HTML 元素
  • console.log() 写入浏览器控制台

基本语法

JavaScript 语句构成:值、运算符、表达式、关键词和注释
JS注释:

//    JS语法
//    当行注释,快捷键:ctrl + /

    /**
     * 多行注释
     */

JS严格区分大小写
JS中每一条语句以;结尾。如果不写分号,浏览器会自动添加,这样会消耗一些系统资源,而有的时候,浏览器会加错分号。
JS中会忽略多个空格和换行,我们可以利用这一特点对我们的代码进行格式化

JavaScript 语法是一套规则,它定义了 JavaScript 的语言结构( 如何声明变量, 如何赋值,如何计算值)
如何声明变量:var (关键词)
如何赋值:=(赋值运算符)
如何计算值:+ - * /(算数运算符)

字面量和变量

字面量,都是一些不可改变的值,比如:1,2,3,“hello”。
字面量都是可以直接去使用的,但我们一般都不会直接使用!因为有可能很多地方都会使用到它,而他有可能非常不好记忆与理解!
变量:可以用来保存我们的字面量。他的值可以改变。程序中使用他更方便!

JS声明一个变量:var关键字

var a;

这个时候,a变量的值为undifined,我们不能使用,除非我们给他赋值。

a = 123;

我们也可以这样写,通过变量对我们的字面量进行描述

var age = 80;

标识符

在JS中,所有的可以由我们自主命名的都可以称作标识符。
例如:变量名,函数名,属性名。

我们命名标识符是需要遵守的规则:

  • 1.标识符中可以包含 字母、数字、_ 、$
  • 2.标识符不能以数字开头(为了轻松区分标识符和数值)
  • 3.指标识符不能是ES中的关键字,或者保留字


    一些常见的关键字和保留字
  • 4.标识符一般采用驼峰式命名法(首字母小写,每个单词的开头字母大写,其他字母小写。如:myAge)

ES底层保存标识符时实际上是采用的Unicode编码,所以理论上讲,所有的UTF-8中含有的内容都可以作为标准!

    var 我的年龄 = 12;
    console.log(我的年龄);

这么写,会正常执行,但强烈不建议这么写!

JS中进制的表示

  • 二进制: 0b开头
  • 八进制:0开头
  • 十六进制:0x开头

JS中的数据类型

数据类型指的就是字面量的数据类型!
JS中的数据类型有6种:String(字符串),Boolean(布尔值),Number(数值),Object(对象),Null(空值),Undefined(未定义),Object(对象)。
String,Boolean,Number,Null,Undefined属于基本数据类型。Object属于引用数据类型

ECMAScript 的 Boolean 值、数字和字符串的原始值是伪对象,具有属性和方法。
ECMAScript 定义所有对象都有 toString() 方法,无论它是伪对象,还是真对象。

String

属性:length
方法:toString()
将字符串“我是一个字符串!”赋值给str变量。

    var str = "我是一个字符串!";
    var words = "我说:'今天天气真好啊!'";
    var words = '我说:"今天天气真好啊!"';

注意:
字符串需要通过引号(单引号或者双引号)引起来。
不要混用单引号与双引号
引号不能嵌套:单引号里面不能嵌套单引号,双引号里面不能嵌套双引号!
但是双引号里面嵌套单引号。

在字符串中,我们可以使用\作为转义字符
即是,当你就想要在双引号里面嵌套双引号的时候,可以这么做:

    var str = "我说:\"今天天气真好啊!\""

常用的转义字符:

\":   "
\':   '
\n:   换行
\t:   制表符
\\:   \

Number

属性:
方法:toString()
在JS中,所有的数值都是Number类型,包括整数和浮点数。

    var str = "123";
    var num1 = 123;
    var num2 = 1.1
    console.log(typeof (str));  //string
    console.log(typeof (num1));  //number
    console.log(typeof num2);  //number
    console.log(str == num1);   // true
    console.log(str === num1);  //false

typeof 运算符来检查一个变量的类型
语法:typeof 变量
问题:
通过输出可以看到,str与num1是不同的数据类型,但使用==的时候却返回true
===则返回了false
回答:
==涉及到了类型转换,后面会详细介绍

Number中的某些特殊数字

  • Number.MAX_VALUE
  • Number.MIN_VALUE
    console.log(Number.MAX_VALUE);// 1.7976931348623157e+308
    console.log(Number.MIN_VALUE);  //5e-324

如果使用Number表示的数字超过了JS的最大值,会返回Infinity

  • Infinity:正无穷,是一个字面量
  • -Infinity:负无穷
    使用 typeof 返回 number
  • NaN
    NaN 也是一个数字,表示Not a Number,也是个字面量
    NaN不等于他本身
    var a = "abc" * 10;
    console.log("a",a);  //a NaN
    console.log(typeof a);  //number

说到了数字,就离不开运算,来看看JS中Number的运算吧!

  • 整数之间的运算基本不会出错
  • 浮点数运算可能得到一个不精确的结果,所以不要用JS来进行对精确度要求比较高的运算
    所有的语言都有这个问题,原因就是二进制没办法完全正确的表示一些浮点数(有些语言自己会有一套解决方案,但JS没有)。

Boolean

布尔值只有两个值,主要用来做逻辑判断
true:真
false:假

    var bool = true;
    var str = "true";
    console.log(typeof bool);  //boolean
    console.log(bool == str);  //false
    console.log(bool === str);  //false

需要注意的是,这里使用==返回了false

Null

Null类型的值就只有一个——null
null常用于表示一个为空的对象

    console.log(typeof  null);  //object

Undefined

Undefined的值只有一个——undefined
表示未定义的。
undefined 实际上是从值 null 派生来 undefined == null 返回true

    var a;
    console.log(a);  //undefined
    console.log(typeof a); //undefined

Object

类型转换:(暂不讨论Object)

指将一个数据类型强制转换为其他数据类型。
类型转换主要指将 其他的数据类型 转换为 String , Number, Boolean 类型

其他数据类型转换为 String 类型:

  • 调用 toString()方法
    toString()方法不会影响原数据,返回一个新数据
    Number 类型的 toString() 方法两种模式,即默认模式基模式
    null和undefined没有toString方法,调用时会报错。
    var a = 0.01;
    console.log(typeof a);  //number
    // a.toString(); 这样写的话不会转换成功
    a = a.toString();
    console.log(a);  //0.01
    console.log(typeof a);  //string
var iNum = 10;
alert(iNum.toString(2));    // "1010"
alert(iNum.toString(8));    // "12"
alert(iNum.toString(16));   // "A"
var iNum1 = 10;
var iNum2 = 10.0;
alert(iNum1.toString());    // "10"
alert(iNum2.toString());    // "10"
  • 调用String()函数,将要转换的数据作为参数传入
    String()函数不会影响原数据,返回一个新数据
    对于Boolean和Number,调用toString()方法
    对于null和undefined,分别返回“null”和“undefined”的字符串形式
    var b = true;
    b = String(b);
    console.log(typeof b); //string
    b = null;
    b = String(b);
    console.log(typeof  b);  //string
  • 使用+ 操作符
    是一种隐式转换,由浏览器完成,实际上是使用了String()函数。
    console.log(undefined + ""); //"undefined"
    console.log(1 + "");   //"1"

其他数据类型转换为 Number类型:

有很多种情况,纯数字的字符串,完全没有数字的字符串,以数字开头的不是纯数字的字符串,不是以数字开头的不是纯数字的字符串,true,false,null,undefined等等等等。

使用Number函数

我们可以直接在控制台写JS代码

空字符串

转换为0

    var a = Number("");
    var b = Number("    1");
    var c = Number("    ");
    console.log(a,typeof a);  //0 number
    console.log(b,typeof b);  //1 number
    console.log(c, typeof c);  //0 number

纯数字字符串转为数字:

不管是整数,还是浮点数,都能正确转换

    // 纯数字的字符串
    var a = Number("123.456");
    console.log(a);  //123.456
    console.log(typeof a);  //number
    var b = Number("123");
    console.log(b);  //123
    console.log(typeof b);  //number

完全没有数字的字符串转为数字:

转换为NaN

//    完全没有数字的字符串
    var a = Number("adb.c%");
    var b = Number("$%^*)(");
    var c = Number("          w12");
    console.log(a);  //NaN
    console.log(b);  //NaN
    console.log(c);  //NaN
    console.log(typeof a);  //number
    console.log(typeof b);  //number

以数字开头的不是纯数字的字符串:

转换为NaN
注意,c不是一个数字,因为一个数字只能有一个小数点。

//    以数字开头的不是纯数字的字符串
    var a = Number("123.0adg");
    var b = Number("123.456asd");
    var c = Number("456.123.2");
    console.log(a,b,c); //NaN NaN NaN

不是数字开头的不是纯数字的字符串:

可以预见,也是转换为NaN

    var a = Number(".adg123");
    var b = Number("asd123.456");
    var c = Number("uio.123");
    console.log(a,b,c); //NaN NaN NaN

true和false:

true:转换为1
false:转换为0


图片.png

null 和 undefined:

null:0
undefined: NaN

    var a = Number(undefined);
    var b = Number(null)
    console.log(a,typeof a)  //NaN number
    console.log(b,typeof b)  //0 number

使用parseInt() 和parseFloat()函数转为Number

parseInt():将一串字符串从左到右解析,直到找到一个字符是无效数字为止,小数点也是无效数字。
parseFloat():将一串字符串从左到右解析,直到找到一个字符是无效数字为止,第一个小数点是有效的,第二个小数点是无效数字。
parseInt() 方法有基模式,parseFloat()则没有。
对于parseInt("010"),有的浏览器会当成10进制去解析,有的会当成八进制解析,最好采用基模式

    console.log(parseInt("12345red"));  //12345
    console.log(parseInt("0xA"));   //10
    console.log(parseInt("56.9"));  //56
    console.log(parseInt(""));  //NaN
    console.log(parseInt("010"), parseInt("010",8), parseInt("010",10));  //10 8 10
//对于parseInt("010"),有的浏览器会当成10进制去解析,有的会当成八进制解析,最好采用基模式
    console.log(parseFloat("12345red"));    // 12345
    console.log(parseFloat("0xA")); // 0
    console.log(parseFloat("11.2"));    // 11.2
    console.log(parseFloat("11.22.33"));    // 11.22
    console.log(parseFloat("0102"));    // 102
    console.log(parseFloat("red")); // NaN
    console.log(parseFloat(" "));  // NaN

总结:

1.使用Number函数

  • 纯数字的字符串转为对应数字
  • 非纯数字的字符串转为NaN
  • 空串或者全是空格的字符串,转换为0
  • true转为 1,false 转为 0
  • null转为0,undefined:转为NaN

2.parseInt()

3.parseFloat()

4.隐式的转换:A-0,A/1,A*1 ,+A(一元运算符的加号)
相当于调用了Number()函数

其他数据类型转换为 Boolean类型:

总的规则:

  • 除了空字符串,其余都是true
  • 除了0 和NaN,其余都是true
  • null和undefined,转为false
  • 对象转换为true
   var a = "";  //false
    var b = "  ";  //true
    var c = 0;  //false
    var d = 1;  //true
    var e = "0";  //true
    var f = "1p";  //true
    var g = "eee"; //true
    var h = true;  //true
    var i = Infinity;  //true
    var j = NaN;  //false
    var k = {};  //true
    var l = null;  //false
    var m = undefined;  //false
    console.log(Boolean(a), Boolean(b), Boolean(c), Boolean(d), Boolean(e),
    Boolean(f), Boolean(g),Boolean(h), Boolean(i), Boolean(j), Boolean(k), Boolean(l), Boolean(m));

你可能感兴趣的:(2019-06-24JavaScript的数据类型)