最近把前一阵学习的原生JavaScript知识又整理了下,作为前端开发者,JS的掌握是必经之路,而掌握JS核心知识又是掌握JS的过程中不可绕过的坎儿,既然绕不过去那就老老实实的啃JS核心吧,前一阵看了《JavaScript面向对象编程指南》和《JavaScript高级程序设计》这两本书,写得很不错,适合初学者。下面总结下最近的学习笔记。先说说基本概念和基本数据类型。
基本概念
变量
JavaScript语言中,变量可以用来保存任何类型的数据,都是通过关键字 var 声明,变量的使用一般有以下几种情况先声明变量再初始化
var a ; //声明变量a a=1; //将1赋值给变量a
声明变量和初始化同时使用
var a =1; // 声明变量a同时将1赋值给变量a
同时声明多个变量
var a,b,c=2,d="hello",e;
上面例子同时声明了变量a,b,c,d,e同时将2赋值给变量c将字符串hello赋值给变量d
注意
- JS中未声明的变量也是可以直接使用的,
a=1;
对未声明的变量直接赋值也是允许的,和声明后在初始化的变量的区别在于每个变量的都有自己的作用域(即变量作用的有效区域)省略了var的变量就成了全局变量,在任何地方都可以被访问到,而通过var定义的变量将成为定义该变量作用域中的局部变量,尽管未声明的变量语法是允许的,但为了避免变量名污染(过多的全局变量名称相互覆盖导致程序出现你并不想得到的结果),变量应该尽量在声明后在使用。
function wool(){ var a =1; //局部变量 b=2; //全局变量 } wool(); //调用函数 alert(b); // "1" alert(a) //出错,a未定义
局部变量a在函数调用后就会被销毁,所有在调用变量a时就会报变量a未定义,因为a已经不存在。变量b未声明,在调用函数后即成为全局变量,在函数外部也可以访问到。
- 变量命名
JS变量可以是数字,字母,下划线,美元符号的组合,但是不能以数字开头,JS变量名区分大小写
var $; var a1b2c3; var _123; var _1a2B$3c;
以上变量声明都是允许的
var 123; var 1a; var 3$;
以上变量声明是不合法的
var a; var A;
以上两个变量是不同的
基本数据类型
JavaScript 只有6种数据类型(没错,6种就够了!我认为这足以让JS成为一门不可替代的优秀编程语言,千万别小看这几个数据类型,不把它们彻底搞清楚,在码代码时会疯掉的)绕远了,先简单介绍下JS中的数据结构.
JS中的6种数据结构又分为5种基本数据类型和1种Object(对象)类型, 其中5种基本数据类型有number(数字)、string(字符串)、boolean(布尔值)、null、undefined。你估计会问函数呢?数组呢?连C语言都有的 JS不会没有吧,当然有!函数,数组,日期等等等等。它们都是属于Object类型,Object类型的强大超出你的想象,以后的笔记中会专门总结。下面来具体说JS的五种基本数据类型。
类型检测
在总结数据类型前,需要先简单说下查看数据类型的方式,说到数据类型那么问题来了,JS是弱类型语言,所有的变量都用var声明,不像C,Java等强类型语言中变量声明有int,string之分,所以JS要通过类型检测来查看某个变量的类型,类型检测常用的方式有两种——使用typeof或instance of,其中instance of适用于对象中具体类型以及继承中父子类关系的检测,具体会在后面的学习笔记中总结。typeof能检测出number、string、boolean、undefined、function、object,在基本数据类型的检测中比较常用。
var a =1;
typeof a; //"number"
var b ="abc";
typeof b; //"string"
var c =true;
typeof =c;
var d; //"undefined"
typeof d;
var e =null;
typeof e; //"object"
function wool(){ alert("HelloWorld");}
typeof wool; //"function"
- number
数字类型中有整数和浮点数(带小数的数字)
var a =1;
typeof a; //"number"
var b =1.1;
typeof b; //"number"
除了生活中常见的十进制数字,还有八进制和十六进制数字
八进制数字以0开头,十六进制数字以0x开头
var a = 012; //八进制的10
var a = 0xA; //十六进制的10;
数字还可以用指数的方式表示
var a = 1e+1; //10
var b = 2e+3; //2000
var c = 2e-3; //0.002
Infinity是一个特殊值,它表示超出范围的数值,但Infinity依然是一个数字类型
typeof Infinity; //"number"
var a = le+400;
a; //Infinity
NaN(Not a Number)的意思是“不是一个数字”,不过NaN依然属于数字类型。
var a = NaN;
typeof a; //"number"
2.string
字符串在定义时以单引号或双引号表示
var a = "HelloWorld!";
typeof a; //"string"
var b = 'Hey!Guys';
typeof b; //"string"
JS中有隐式转换,可以在数字类型和字符串类型之间相互转换
var a ="10";
typeof a; //"string"
a =a*1;
typeof a; //"number"
a = a+"";
typeof a; //"string"
a = a-"";
typeof a; //"number"
a = "a"; //将字母a赋值给变量a
a = a-""; //NaN 转换number失败会得到NaN
3.boolean
布尔类型只要两种值:true、false
var a = true;
typeof a; //"boolean"
JS中 !、 && 、 || 经常在使用这三种逻辑运算符涉及布尔运算,在布尔运算中,空字符串“”、null 、undefined、数字0、数字NaN、布尔值false这六个值转换为布尔值时得到的是false。
var a =1;
!!a; //true (求自身boolean值)
4.undefined
当声明变量而没有初始化时,JS会自动将该变量初始化为undefined(未定义)
var a;
a; //"undefined"
typeof a; //"undefined"
a === undefined; //true
5.null
null不同于未定义
var a = null;
a; //null
typeof a; //"object"
null == undefined; // true
null === undefined; // false
这里出现几个问题,通过typeof发现,null的类型是object,可以简单理解为null类型是表示空对象的指针,在使用过程中,如果声明的变量将来需要被对象类型赋值,那么就把该变量初始化为null;