JavaScript基础复习(一) 语言特性及数据类型

终于要开始写JS系列了,目标列了很久,导图也作了,但总没有行动,近来无事,总结一下这个系列的学习。



零、是什么

    JavaScript是前端必学语言,和HTML,CSS并称为前端三剑客,是一门运行在浏览器端的脚本语言,功能是操做DOM,处理数据,渲染特效等

1、语言特性

一、弱类型

    说白了就是类型定义,对应的就是强类型,好比Java,C等都是强类型语言,在使用变量的时候必须声明是哪一种类型的,一旦被定义了数据类型,除非强制类型转换,那么它到销毁的时候都是这个类型的,这样固然是比较安全的。而弱类型就是不须要定义是什么数据类型,它的值就表示了它是什么类型的,以下

var asd1 = 'have a nice day'   //string
var asd2 = 20                  //number
var asd3 = new Date()          //object
var asd4 = ['1','3','4']       //object
var asd5 = true                //boolean
复制代码

二、动态性

    能够直接对用户的操做作出相应,不须要经过Web服务器。采用事件驱动的方式进行,好比你点击一个提交按钮就是一个事件,也就是说你执行某种操做的动做,很是常见。当相关事件在触发的时候就会自动执行须要响应的脚本或函数。

三、运行在浏览器端

    js脚本语言不容许访问本地硬盘,也不能存储在服务器上,因此它只能经过浏览器实现数据的展现和动态交互,正是由于这样,保证了数据的安全性。

四、跨平台性

    依赖于浏览器自己,与操做环境无关。只要能运行浏览器的计算机,并安装了支持javascript的浏览器就能够正确执行,从而实现了“编写一次,走遍天下”的梦想。

五、脚本语言

    解释性脚本语言,javascript不须要编译,只须要嵌入到html代码中,由浏览器逐行加载解释执行

2、基本数据类型

    JavaScript的基本类型值是保存在栈内存中的简单数据段,按值存储,因此按值访问。基本数据类型有:
    Number、String、Boolean、Null、Undefined、以及ES6的symbol(独一无二的值)。
    用typeof 来检验基本类型,参考弱类型的举例,能够返回这些值:undefined、boolean、string、number、object、function
    这里还有一些有意思的例子:

typeof undefined      //undefined
typeof null           //object
typeof ['1','2','3']  //object
typeof {asd:'sssss'}  //object复制代码

因此不要使用typeof 来区分数组仍是对象,由于都返回object。

说说null和undefined的区别。

都表示 无,若是转换为数值     undefined => NaN             有声明,但未赋值或者未初始化
                                               null => 0 (原型链的终点)     没有,也没有定义,不存在

typeof 未定义值     // undefined
typeof 未初始化值   // undefined复制代码

3、进阶

    JavaScript 的基本知识就是上述,你可能发现好像很简单并很少,那只是基本类型,咱们经常使用到的Object尚未介绍呢,接下来讲一下进阶的知识。

一、引用类型

    和基本类型对应,引用类型是保存在堆内存中的对象,值是可变的,在栈中保存对应的指针(一个指向堆的引用地址),指向堆中实际的值。
    类型值:Object(在JS中除了基本数据类型之外的都是对象,数组是对象,函数是对象,正则表达式是对象)
    使用 instanceof 检测引用类型

var a = [1,2]
var b = {'a':'asss'}
alert( a instanceof Array)   // true
alert( b instanceof Object)  // true 复制代码

    ​那么基本类型和引用类型有什么区别呢。

var arr = [2,4,6];
var bcc = arr;//传址 ,对象中传给变量的数据是引用类型的,会存储在堆中;
var cxx = arr[0];//传值,把对象中的属性/数组中的数组项赋值给变量,这时变量C是基本数据类型,存储在栈内存中;改变栈中的数据不会影响堆中的数据
alert(bcc);//2,4,6
alert(cxx);//2
//改变数值 
bcc[1] = 6;
cxx = 7;
alert(arr[2]);//6
alert(arr[0]);//2
复制代码

    从上面咱们能够得知,当我改变bcc中的数据时,arr中数据也发生了变化;可是当我改变cxx的数据值时,arr却没有发生改变。
    这就是 传值传址的区别。由于arr是数组,属于引用类型,因此它赋予给bcc的时候传的是栈中的地址(至关于新建了一个不一样名“指针”),而不是堆内存中的对象。而cxx仅仅是从arr堆内存中获取的一个数据值,并保存在栈中。因此bcc修改的时候,会根据地址回到arr堆中修改,cxx则直接在栈中修改,而且不能指向arr堆内存中。
    接下来就涉及到比较经常使用的深拷贝和浅拷贝,咱们放在以后来讲。

二、类型判断

    在开发的过程当中常常会判断值是否相等来进行下一步的操做,在js中有两个方式判断两个值是否相等。
== 等于操做符
    js是弱类型语言,在使用 == 操做符的时候,会进行强制类型转换

""           ==   "0"           // false
0            ==   ""            // true
0            ==   "0"           // true
false        ==   "false"       // false
false        ==   "0"           // true
false        ==   undefined     // false
false        ==   null          // false
null         ==   undefined     // true
" \t\r\n"    ==   0             // true
复制代码

    由于在强制类型转换的时候规则比较复杂,因此说使用 == 是一个很差的编程习惯,也会带来性能消耗。
javascript

 === 全等操做符html

不会进行强制类型转换,前端

""           ===   "0"           // false
0            ===   ""            // false
0            ===   "0"           // false
false        ===   "false"       // false
false        ===   "0"           // false
false        ===   undefined     // false
false        ===   null          // false
null         ===   undefined     // false
" \t\r\n"    ===   0             // false
复制代码

因此推荐使用 === 操做符
java

三、类型转换

因此已经使用了 === 操做符,可是仍是会产生不少问题,那么否则咱们本身进行类型转换。git

    转换为 字符类型: 将一个值加上空字符串能够轻松转换为字符串类型github

'' + 10 === '10'; // true
复制代码

    转换为 数字类型: 使用一元的加号操做符,能够把字符串转换为数字。
正则表达式

+'10' === 10; // true
复制代码

    转换为布尔值: 经过使用 操做符两次,能够把一个值转换为布尔型
编程

!!'foo';   // true
!!'';      // false
!!'0';     // true
!!'1';     // true
!!'-1'     // true
!!{};      // true
!!true;    // true复制代码

over~

参考:bonsaiden.github.io/JavaScript-…
数组




    关注我获取更多前端资源和经验分享 关注后回复 vivi 获取个人微信号,望不吝赐教,pps:可轻撩哈哈 浏览器


 感谢大佬们阅读,但愿你们头发浓密,睡眠良好,情绪稳定,早日实现财富自由~ 

相关文章
相关标签/搜索