JavaScript学习小结 —— 基础语法 ,数据类型与变量

基础语法

在Javascript中,每个语句以;结尾,语句块使用{...},javascript中并不强制要求在语句结尾加,浏览器中解释执行javascript的引擎会自动在每个语句结尾补上.

注意 :让JavaScript引擎自动加分号在某些情况下会改变程序的语义,导致运行结果与期望不一致。所以养成一个习惯在每个语句后添加; .

下面一行代码包含两个语句每个语句以封号表示结束;
var x = 1;var y = 2; // 不建议一行写多个语句

代码块{...}内的语句具有缩进,通常是4个空格。缩进不是JavaScript语法要求必须的,但缩进有助于我们理解代码的层次,所以编写代码时要遵守缩进规则。很多文本编辑器具有“自动缩进”的功能,可以帮助整理代码。

{...}中可以嵌套,形成层级结构;JavaScript本身对嵌套的层级没有限制,但是过多的嵌套无疑会大大增加看懂代码的难度。遇到这种情况,需要把部分代码抽出来,作为函数来调用,这样可以减少代码的复杂度。

注释

//这是一行注释代表行注释,/*{...}*/块注释。

数据类型和变量

Number
javascript不区分整数与浮点数,以下都是合法的Number数据类型;
123; // 整数123
0.456; // 浮点数
1.266e3; //科学技术法表示1.266*1000,等同于1266
NaN; // NaN表示 NoT a Number,当前无法计算结果时用NaN表示
-99; // 负数
Infinity; // Infinity表示无限大

Number可以直接做四则运算,规则和数学一致:
%表示取余运算。

字符串

字符串是以单引号’或者双引号”括起来的任意文本。

布尔值

一个布尔值只有true,false两个值,&&是与运算,||是或运算,是非运算,它是一个单目运算符,把true变成false,或者反之。
布尔值经常用于条件判断中。

比较运算符

当我们对Number做比较时,可以通过比较运算符得到一个布尔值。
javascript允许任意类型相互之间做比较。
false == 0 // true
false === 0 // false

==比较,它会自动转换数据类型再比较,很多时候会得到诡异的结果,
===比较,它不会自动转换数据类型,如果数据类型不一样,它会返回false,如果一样,它才会比较。由于javascript这个设计缺陷,在比较的时候,应该始终使用===

还有一个特例是NaN这个特殊的Number与所有其他值都不相同
NaN === NaN; // false

最后要注意浮点数之间的比较
1 / 3 === (1 - 2 / 3); // false

这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:

Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

null和undefined

null是一个空的值,它和0,不一样,`0`是一个数字,是一个长度为0的字符串,null表示空。

null表示空的值,undefined表示未定义,大多数情况下我们都应该用nullundefined仅仅在判断函数参数是否传递的情况下有用。

数组

数组是一组按顺序排列的的集合,用[]表示,集合中的每个值称为元素,用,分隔开,数组中的元素可以是任何数据类型,比如

[1,"hello",true,null,3.14];

另一种创建数组的方法是使用Array():

new Array(1,2,3) // 创建了数组[1,2,3]

出于可读性考虑,强烈建议使用[],数组可以通过索引访问,初始索引为0:

var arr = [1,2,3];
arr[0] // 返回索引为0的元素,即1

对象

javascript对象是一组由键-值组成的无序集合,例如:

var person = {
name: 'Bob ',
age: 20,
tags: ['js','css','html'],
hasCar: false,
zipcode: null
}

javascript对象的键都是字符串类型,值可以是任意数据类型,其中每个键又称之为对象的属性,例如personname属性为'Bob'.

要获取一个对象的属性,我们用对象变量.属性名的形式。
person.name; // 'Bob'

变量

变量在JavaScript中用一个变量名表示,变量名可以由大小写英文字母,数字,$,_,组成,不能以数字开头,不能使用JavaScript关键字,比如ifwhile.变量可以是任意数据类型,申明一个变量使用var

var a; // 申明变量a,此时变量a的值为undefined
var $b = 2 // 申明一个变量$b同时给$b赋值,其值为2
var _c = null // 申明变量_c,同时给_c赋值为null
var D = 'Hello' // D是一个字符串

变量名也可以使用中文,但不要给自己找麻烦。

在JavaScript中使用=来赋值,一个变量可以多次赋值,且每次值可以是不同类型,但只能申明一次:

var a = 1;
a = 'hello';
a = null;

这种变量本身数据类型不固定的语言称之为动态语言,与之对应的是静态语言,静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错,例如Java就是一门静态语言,其赋值如下:

int a = 123; // a是整数类型变量,用int申明
a = 'hello'; // 错误不能把字符串赋值给整型变量

和静态语言相比,动态语言更灵活。

请不要把赋值语句的等号等同于数学的等号。比如:

var x = 10;
x = x + 2;

赋值语句先计算右侧的表达式x + 2,得到结果12,再赋值给x

strict模式

javascript在设计之初,为了方便初学者学习,并不强制要求申明变量时一定要使用var,这导致了严重的后果,如果一个变量没有通过var申明就使用,该变量就会自动申明为全局变量:

i = 10; // 现在i是全局变量

在同一个页面的不同javascript文件中,如果都不使用var申明,刚好都使用了变量i,将造成变量i相互影响,产生难以调试的错误结果。

使用var申明的变量不是全局变量,而是局部变量,它的范围被限制在申明该变量的函数体内,同名变量在不同函数体内互不冲突。

为了修补JavaScript这一设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制使用var来申明变量,不未经var申明就使用变量,将导致运行错误。

启用strict模式的方法,是在JavaScript代码的第一行写上:

'use strict';

这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript.

你可能感兴趣的:(web前端,javascript)