1 javascript 基本概念

一.语法

1.区分大小写

如test和Test分别表示两个不同的变量

2.标识符

标识符指的是变量、函数、属性的名字,或者函数的参数。标识符可以是按照下列格式规则组合起来的一个或多个字符:

第一个字符必须是一个字母、下划线(_)或一个美元符号($)

其他字符可以是字母、下划线、美元符号或数组

推荐采用驼峰大小写格式,也就是第一个字母小写,剩下的每个单词首字母大写:

firstSecond、myCar、doSomethingImportant

不能将关键字、保留字、true、false、和null用作标识符

3.注释

类C风格,有//单行注释与/* */多行注释两种

4.严格模式

ES5中引入了严格模式的概念。严格模式是为Javascript定义了一种不同的解析与执行模型。在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。

在整个脚本中启用严格模式,可以在顶部添加代码:"use strict";

指定函数在严格模式下执行,可在函数内部的上方包含"use strict"

5.语句

javascript中的语句以一个分好结尾;如果省略分号,则由解析器确定语句的结尾,如下例所示:

var sum = a + b//即使没有分好也是有效的语句——不推荐

var diff = a - b//有效的语句——推荐

可以使用C风格的语法把多条语句组合到一个代码快中,即代码快以左括号({)开头,以右括号(})结尾:

if (test){

test = false;

alert(test);

}

虽然条件控制语句(如IF语句)只在执行多条语句的情况下才要求使用代码快,但最佳实践是始终在控制语句中使用代码快——即使代码快中只有一条语句,例如:

if (test)

alert(test);//有效,但容易出错,不要使用

if (test){ //推荐使用

alert(test);

}

在控制语句中使用代码快可以让编码意图更加清晰,而且也能降低修改代码时出错的几率。


二.关键字和保留字

关键字是一组具有特定用途的标志,这些关键字可用于表示控制语句的开始和结束,或者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符


javascript描述了另一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用于,但它们有可能将来被用作关键字


此外,严格模式与非严格模式的保留字限制也不相同,具体有哪些关键字与保留字可自行百度


三.变量

javascript变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用var操作符(注意var是一个关键字),后跟变量名(即一个标识符),如下所示:

var message;

这行代码定义了一个名为message的变量,该变量可以用来保存任何值,如:

var message = "hi";

message = 10;//有效,但不推荐

var操作符定义的变量将成为该变量的作用域中的局部变量。也就是说,如果在函数中使用var定义了一个变量,那么这个变量在函数退出后就会被销毁,例如:

function test(){

var message = "hi";// 局部变量

}

test();

alert(message);// 错误!

若省略var操作符,将创建一个全局变量:

function test(){

message = "hi";// 全局变量

}

test();

alert(message);// "hi"

虽然使用var操作符可以定义全局变量,但这种做法不被推荐。

可以使用一条语句定义多个变量,只要像下面这样把每个变量(初始化与否均可)用都好隔开即可:

var message = "hi",

found = false,

age = 29;


四.数据类型

javascript有5种简单数据类型(也成为基本数据类型):Undefined、Null、Boolean、Number和String。还有一种复杂数据类型——Object,Object的本质是由一组无序的明值对组成的。

1. typeof操作符

typeof操作符可用来检测变量的数据类型,对一个值使用typeof操作符可能返回下列某个字符串:

"undefined"——如果这个值未定义;

"boolean"——如果这个值是布尔值;

"string"——如果这个值是字符串;

"number"——如果这个值是数值;

"object"——如果这个值是对象或null

"function"——如果这个值是函数

下面是几个使用typeof操作符的例子:

var messa = "some string";

alert(typedof message);// "string"

alert(typeof (message));// "string"

alert(typeof 95);// "number"

从技术角度讲,函数在javascript中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的


2.Undefined类型

Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值是undefined,例如:

var message;

alert(message == undefined);// true


3.Null类型

Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度讲,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回"object"的原因,如下面所示的例子:

var char = null;

alert(typeof car);// "object"

4. Boolean类型

该类型只有两个字面值:true和false。这两个值与数字值不是一回事,因为true不一定等于1,而false也不一定等于0,如:

var found = false;

var lost = true;

各种数据类型转换成Boolean类型的规则:

数据类型 转换为true的值 转换为false的值

Boolean true false

String 任何非空字符串 ""(空字符串)

Number 任何非零数字值(包括无穷大) 0和Nan(Not a Number)'

Object 任何对象 null

Undefined 无法转换 undefined


5.Number类型

此类型使用IEEE754格式来表示整数和浮点值。

var intNum = 55;// 十进制整数

var octalNum1 = 070;// 八进制的56

var octalNum2 = 079;// 无效的八进制数值——解析为79

var octalNum3 = 08;// 无效的八进制数值——解析为8

八进制字面量在严格模式下是无效,会抛出错误


var hexNum1 = 0xA;// 十六进制的10

var hexNum2 = 0x1f;// 十六进制的31

在进行算术计算时,所有八进制和十六进制最终都将被转换成十进制数值


1.浮点数值

var floatNum1 = 1.1;

var floatNum2 = 0.1;

var floatNum3 = .1;// 有效,解析为整数1,不推荐

var floatNum4 = 1.;// 小数点后面没有数字——解析为1

var floatNum5 = 10.0;// 整数——解析为10


var floatNum = 3.125e7;// 等于31250000


浮点值一般存在误差,不用测试某个特定的浮点值:

if (a + b == 0.3){// 错误

}


2.数值范围

javascrip能够表示的最小数值保存在Number.MIN_VALUE中——在大多数浏览器中,这个值是5e-324;能够表示的最大数值保存在Number.MAX_VALUE中——在大多数浏览器中,这个值是1.7976931348623157e+308。如每次计算的结果超出范围,则该值会被自动转换成特殊的Infinity值


3.NaN

NaN,即非数值,是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数为返回数值的情况(这样就不会抛出错误了)。例如,在其他编程语言中,任何数值除以非数值都会导致错误,从而停止代码执行。但在javascript中,任何数值除以非数值会返回NaN,因此不会影响其他代码的执行


4.数值转换

有3个函数可以把非数值转换成数值:Number()、parseInt()和parseFloat。Number()可以用于任何数据类型,而其他两个函数则专门用于把字符串转换成数组

Number()函数的转换规则如下:

如果是Boolean值,true和false将分本别转换成1和0

如果是数字值,只是简单的传入和返回

如果是null值,返回0

如果是undefined,返回NaN

如果是字符串,遵循下列规则:

如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"转换成1,"123"转换成123,而"011"会变成11(注意,前导的零被忽略了)

如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值(同样,也会忽略前导零)

如果字符串中包含有效的十六进制,例如"0xf",则将其转换为相同大小的十进制整数值

如果字符串是空的(不包含任何字符),则将其转换为0

如果字符串中包含除上述格式之外的字符,则将其转换为NaN

如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换字符串值


parseInt()转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空字符串。如果第一个字符不是数字字符或者负号, parseInt()会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。

var num1 = parseInt("1234blue");//1234

var num2 = parseInt("");//NaN

var num3 = parseInt("0xA");//10(十六进制数)

var num4 = parseInt(22.5);//22

var num5 = parseInt("070");//56 (八进制)

var num6 = parseInt("70");//70(十进制数)

var num7 = parseInt("0xf");//15(十六进制数)


为消除数值转换时的分歧:

//ES3认为是56(八进制),ES5认为是70(十进制)

var num = parseInt("070");

parseInt()提供了第二个参数:转换时使用的基数

var num = parseInt("0xAf", 16);// 175


var num1 = parseInt("10", 2);//2 (按二进制解析)

var num2 = parseInt("10", 8);//8 (按八进制解析)

var num3 = parseInt("10", 10);//10 (按十进制解析)

var num4 = parseInt("10", 16);//16 (按十六进制解析)


parseFloat与parseInt解析方式类似,parseFloat解析时,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了。其次,它始终会忽略前导的0。

var num1 = parseFloat("1234blue");//1234(整数)

var num2 = parseFloat("0xA");//0 (解析十六进制时始终为0)

var num3 = parseFloat("22.5");//22.5

var num4 = parseFloat("22.34.5");//22.34

var num5 = parseFloat("0908.5");//908.5

var num6 = parseFloat("3.125e7");//31250000


6.String类型

String类型用于表示由零个或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号(")或单引号(')表示,因此下面两种字符串的写法都是有效的:

var firstName = "Nicholas";

var lastName = "Zakas";


1.字符字面量

String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。这些字符字面量如下表所示:

字面量 含义

\n 换行

\t 制表

\b 退格

\r 回车

\f 进纸

\\ 斜杠

\' 单引号('),在用单引号表示的字符串中使用。例如,'He said, \'hey.\''

\" 双引号("),在用双引号表示的字符串中使用。例如,"He said, \"hey.\""

\xnn 以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示“A”

\unnnn 以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如,\u03a3表示希腊字符∑  


2.字符串的特点

字符串一经创建,他们的值就不能改变。要改变某个变量保存的字符串,首先要摧毁原来的字符串,然后再用另一个包含新值的字符串填充该变量,例如:

var lang = "Java";

lang = lang + "Script";


3.转换为字符串

第一种方式,使用toString()方法(null和undefined值没有这个方法)

var num = 10;

alert(num.toString());// "10"

alert(num.toString(2));// "1010"

alert(num.toString(8));// "12"

alert(num.toString(10));// "10"

alert(num.toString(16));// "a"

第二种方式,使用转型函数String() (null和undefined也可使用),规则如下:

如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;

如果值是null,则返回“null”

如果值是undefined,则返回"undefined"


var value1 = 10;

var value2 = true;

var value3 = null;

var value4;

alert(String(value1)); //"10"

alert(String(value2));// "true"

alert(String(value3));// "null"

alert(String(value4));// "undifined"


7.Object类型

javascript对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并未其添加属性和方法,就可以创建自定义对象,例如:

var o = new Object();

在不传递参数的情况下,可以省略括号(不推荐):

var o = new Object;//有效,但不推荐省略圆括号


仅仅创建Object实例并没有什么用处,但关键是要理解一个重要思想:javascript中,Object类型是所有它的实例的基础。换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。


Object的每个实例都具有下列属性和方法:

constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数就是Object()

hasOwnProperty(propertyName):用于检查给定的属性在当前实例中(而不是实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如,o.hasOwnProperty("name"))。

isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型

propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举,参数的属性名必须以字符串形式指定

toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应。

toString():返回对象的字符串表示

valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同


一般而言,object是所有对象的基础,因此所有对象都具有这些基本的属性和方法。在浏览器环境中的对象,比如BOM和DOM中的对象,都属于宿主对象,因为它们是由宿主实现提供和定义的,因此宿主对象可能会也可能不会集成Object


五.操作符

javascript中的操作符能够作用于很多值,如字符串、数字值、布尔值、甚至对象(调用valueOf或者toString方法)

1.一元操作符

++(前置和后置)、--(前置和后置),这4个操作符适用于任何值,规则如下:

在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作。字符串变量变成数值变量

在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN。字符串变量变成数值变量

在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变量变成数值变量

在应用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量

在应用于浮点数值时,执行加减1的操作

在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值。然后对改制应用前述规则。如果结果是NaN,则在调用toString()方法后再应用前述规则。对象变量变成数值变量。


2.一元加和减操作符

var s1 = "01";

var s2 = "1.1";

var s3 = "z";

var b = false;

var f = 1.1;

var o = {

valueOf: function(){

return -1;

}

};

s1 = -s1; // 值变成了数值-1

s2 = -s2; // 值变成了数值-1.1

s3 = -s3; // 值变成了NaN

b = -b; // 值变成了0

f = -f; // 变成了-1.1

o = -o; // 值变成了数值1


2.位操作符

按位非(NOT)

var num1 = 25;

var num2 = ~num1;

alert(num2);// -26

按位与(AND)

var result = 25 & 3;

alert(result);// 1


按位或(OR)

var result = 25 | 3;

alert(result);// 27


按位异或(XOR)

var result = 25 ^ 3;

alert(result);// 26


左移(左移不会影响操作数的符号)

var oldValue = 2;// 等于二进制的10

var newValue = oldValue << 5;// 等于二进制的1000000,十进制的62


有符号的右移

var oldValue = 64;// 等于二进制的1000000

var newValue = oldValue >> 5;// 等于二进制的10,即十进制的2

无符号的右移

var oldValue = 64;// 等于二进制的1000000

var newValue = oldValue >>> 5;// 等于二进制的10,即十进制的2


var oldValue = -64;// 等于二进制的11111111111111111111111111000000

var newValue = oldValue >>> 5;// 等于十进制的134217726


3.布尔操作符

1.逻辑非

操作规则:

如果操作数是一个对象,返回false

如果操作数是一个空字符串,返回true

如果操作数是一个非空字符串,返回false

如果操作数是数值0,返回true

如果操作数是任意非0数值(包括Infinity),返回false

如果操作数是null,返回true

如果操作数是NaN,返回true

如果操作数是undefined,返回true

两个!!类似于Boolean()函数,用于得到该值真正对应的布尔值

alert(!!"blue");// true

alert(!!0);// false

alert(!!NaN);// false

alert(!!"");// false

alert(!!12345);// true


2.逻辑与 (&&)

3.逻辑或 (||)


4.乘性操作符

1.乘法 (*)

2.除法 (/)

3.求模 (%)


5.加性操作符

1.加法 (+)

2.减法 (-)


6.关系操作符

大于 >

小于 <

小于等于 <=

大于等于 >=


7.相等操作符

全等(===) 不经转换直接比较

不全等(==) 换将操作数转换成同一种类型

由于相等和不想等操作符存在类型转换问题,而为了保持代码中数据类型的完整性,推荐使用全等和不全等操作符


8.条件操作符

variable = boolean_expression ? true_value : false_value;


9.赋值操作符

简单赋值(=)

复合赋值操作符

乘 / 赋值(*=)

除 / 赋值(/=)

模 / 赋值(%=)

加 / 赋值(+=)

减 / 赋值(-=)

左移 / 赋值(<<=)

有符号右移 / 赋值(>>=)

无符号右移 / 赋值(>>>=)


10.逗号操作符

var num1 = 1, num2 = 2, num3 = 3;


var num = (5, 1, 4, 8, 0);// num的值为0


六.语句

1. if语句

if (conditon)statement1 else statement2


2. do-while语句

3.while语句


4.for语句

5.for-in语句

for (var propName in window){

}

6.label语句

使用labe语句可以在代码中添加标签,以便将来使用。以下是label语句的语法:

label : statement

示例:

start: for (var i = 0; i < couont; ++i){

}


7.break和continue语句


8.with语句

不推荐使用


9.switch语句(switch语句中可使用任何数据类型,而不仅仅是数值)

七.函数

1.基本语法:

function functionName(arg0, arg1, ,,, , argN){

statements

}


示例:

function sayHi(name, message){

alert("hello " + name + ",", + message);

}

注意:可在函数体的任何地方加入return语句,return语句后的所有语句将不在执行,若函数没有return语句,在函数停止执行后将放回undefined值


2.理解参数

javascript中的参数在内部是用一个数组表示的,因此传递参数时,javascript函数不在乎传入参数的数据类型和个数。在函数体内可通过arguments对象来访问这个参数数组。

argument对象只是与数组类似(并不是Array的实例),可用方括号访问每一个元素(arguments[0],arguments[1]),使用length属性来确定传递进来多少个参数。

arguments的值永远与它对应命名参数的值保持同步,但它们的内存空间是相互独立的


3.函数没有重载

function addSomeNumber(num){

return num + 100;

}

function addSomeNumber(num){

return num + 200;

}

var result = addSomNumber(100);// 300

后面定义的函数会覆盖之前定义的函数,可以通过检查传入参数的类型和数量做出不同的反映,模仿方法的重载


八.小结

javascript中的基本数据类型包括Undefined、Null、Boolean、Number和String

与其他语言不同,javascript没有为整数和浮点数值分别定义不同的数据类型,Number类型可以用于表示所有数值

javascript也有一种复杂的数据类型,即Object类型,该类型是这门语言中所有对象的基础类型

严格模式为这门语言中容易出错的地方施加了限制

javascript提供了很多与C及其他类C语言中相同的基本操作符,包括算术操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等

javascript从其他语言中借鉴了很多流控制语句,例如If语句、for语句和switch语句等

javascript中的函数与其他语言中的函数有诸多不同之处

无须指定函数的返回值,因为任何javscript函数都可以在任何时候返回任何值

实际上,未指定返回值的函数返回的是一个特殊的undefined值

javascript中也没有函数签名的概念,因为其函数参数是一个包含零或多个值的数组的形式传递的

可以向javascript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数

由于不存在函数签名的特性,javascript函数不能重载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值