《JavaScript高级程序设计》读书笔记(三)基本概念第一小节

内容
---语法 本小节
---数据类型 本小节 undefined,null,Boolean
---流程控制语句
---理解函数

任何语言的核心都必然会描述这门语言最基本的工作原理。
而描述的内容通常都要涉及这门语言的语法、操作符、数据类型、内置功能等,
用于构建复杂解决方案的基本概念

语法
---ECMAScript语法大量借鉴C及类C语言(如java,Perl)

区分大小写
---一切(变量、函数名、操作符)都区分大小写

标识符
---变量、函数、属性的名字或者参数
---第一个字符必须是,字母、下划线(——)或者一个美元符号($)
---其他字符可以是字母、下划线、美元符号、数字。

标识符采用驼峰大小写格式
---firstSecond
---myCar
---doSomethingImportant

--不能把关键字、保留字、true、false、null用作标识符。

注释
//单行注释
/* */块级注释
/*
* 惯用写法
*/

严格模式
--es5引入了严格模式(strict mode)的概念
--为JavaScript定义了一种不同的解析和执行模型
--在严格模式下 es3的一些不确定行为得到处理,不安全操作也会跑错


要启用严格模式 可在顶部添加:

"use strict";

--编译指示(pragma)

也可在函数内部启用严格模式:
function doSomething() {
"use strict";
//函数体
}

--严格模式下,JavaScript执行的结果会有很大不同

语句
--以分号(;)结尾,如果省略则由浏览器确定语句的结尾(不推荐)
----避免不完整输入、利于代码压缩、增加性能
var sum = a + b //即使没有分号也是有效的语句--不推荐
var diff = a - b; //有效的语句--推荐


--不要省略代码块 即使只有一条语句 降低修改代码出错几率
if(test)
alert(test); //有效但容易出错、不要使用
if(test) {
alert(test); //推荐使用
}


关键字和保留字
--关键字,用于表示控制语句的开始和结束,或者用于执行特定操作
--保留字,目前没用,但是可能将来被用作关键字

ECMAScript的全部关键字(带*号的是es5新增的关键字)
break, do, instanceof, typeof, case, else,
new, var, catch, finally, return, void,
continue, for, switch, while, debugger*,
function, this, with, default, if, throw,
delete, in, try

es3全部保留字
abstract, enum, int, short, boolean, export, interface, static,
byte, extends, long, super, char, final, native, synchronized,
class, float, package, throws, const, goto, private, transient,
debugger, implements, protected, volatile, double, import, public

在es5把非严格模式下运行时的保留字缩减为:
class, enum, extends, super, const, export, import
在严格模式下,还对以下保留字施加了限制:
implements, package, public, interface, private, static, let, protected, yield

--let和yield(异步编程有关)是es5 保留字
--使用关键字会导致 ,identifier expected(预期标识符),错误
--使用保留字,可能不会出错,具体看特定的引擎
--es5中 可以把关键字和保留字用于对象的属性名,不建议
--es5对eval和arguments也施加了限制,在严格模式下不能作为标识符和属性名

变量
--ECMAScript的变量是松散类型,即可以用来保存任何类型的数据
--变量仅仅是一个用于保存值的占位符
--定义变量时要用var操作符(关键字)

var message;

--定义但是未初始化会保存一个特殊值----undefined

--定义并初始化

var message = "hi";
message = 100; //有效的是不推荐,修改变量的保存值类型

--使用var操作符定义的变量将成为定义该变量作用域中的局部变量
--在函数中使用var定义变量,在函数退出后会被销毁

function test() {
var message = "hi"; //局部变量
}
test();
alert(message); //错误!

--未经声明的变量赋值时,省略var操作符,会声明全局变量
--不推荐,在局部作用域中定义全局变量很难维护
--严格模式下,未经声明的变量赋值会导致抛出ReferenceError错误

--可以使用一条语句定义多个变量,初始化可选,用逗号隔开

var message = "hi",
found,
age = 29;

--使用换行和缩进增加可读性
--严格模式下,不能定义名字是eval和arguments 的变量

数据类型
--ECMAScript中有5种简单数据类型(基本数据类型)和一种复杂数据类型
----基本数据类型:undefined、null、Boolean、Number、String
----复杂数据类型:Object,本质上是由一组无序的名值对组成的
--ECMAScript不支持创建自定义类型的机制
--因为ECMAScript数据类型是动态性的,也没有再定义其他数据类型的必要了


typeof操作符
--因为ECMASript是松散类型,因此需要一种手段来检测给定变量的数据类型-typeof

一个值使用typeof操作符可能返回:
--undefined,值未定义
--boolean, 布尔值
--string, 字符串
--number, 数值
--object, 对象或者null
--function, 函数

--typeof是操作符不是函数()括号不是必须的
--typeof null//object,是因为特殊值null被认为是一个空的对象引用
--safari5之前,chrome7之前版本对正则表达式调用typeof 返回function 而其他浏览器返回object
--从技术角度,函数在ecmascript中是对象,不是数据类型,
然而函数也有特殊属性,所以用过typeof可以区分函数和其他对象

undefined类型
--只有一个值 特殊的undefined,在使用var声明变量是未初始化时这个变量值就是undefined
--没必要初始化为undefined,因为未初始化值默认为undefined

--声明未定义和未声明不同

var message;
alert(message); 'undefined'
alert(age); 错误

--对声明未定义和未声明使用typeof,返回的都是undefined
--所以尽量显示的初始化变量,这样我们时候typeof 返回undefined时,就知道是未声明


null类型
--第二个只有一个值(null)的数据类型
--逻辑上表示一个空的对象指针,所以 typeof null => object
--定义变量准备用于保存对象,那么初始化为null最好不过

if(car != null) {
//对car对象的某些操作
}

--实际上,undefined值派生自null值,所以

null == undefined //true

boolean类型

--使用最多的类型之一,两个值,true和false。
--区分大小写
--虽然boolean类型字面值只有两个,但是ECMAScript中所有类型都有与之等价的值
--可调用Boolean()转型函数,将一个其他类型的值转化其对应的boolean值
--转型规则

数据类型 true false
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零数字值(包括无穷大) 0和NAN(不是数值)
Object 任何对象 null
undefined n/a(不适用) undefined

--判断语句中会自动执行Boolean转换

猜你喜欢

转载自www.cnblogs.com/loveluking/p/9426853.html
今日推荐