内容
---语法 本小节
---数据类型 本小节 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转换

《JavaScript高级程序设计》读书笔记(三)基本概念第一小节的更多相关文章

  1. 《javascript高级程序设计》笔记三

    第三章 基本概念 任何语言的核心必然会描述这门语言最基本的工作原理.这部分内容对我们来说,读起来很乏味,甚至会产生困意,但这部分内容却是重要的!我有幸拜读<JavaScript高级程序设计> ...

  2. javascript高级程序设计读书笔记-事件(一)

    读书笔记,写的很乱   事件处理程序   事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别  没有DOM1 同样的事件 DOM0会顶掉html事件   因为他们都是属性  而 ...

  3. Javascript高级程序设计读书笔记(第三章)

    第3章 基本概念 3.4 数据类型 5种简单数据类型:undefined.boolean.number.null.string. typeof操作符,能返回下列某个字符串:“undefined”.“b ...

  4. 《JavaScript高级程序设计》笔记:基本概念(三)

    数据类型 ECMAScript中有5种简单数据类型(也称为基本数据类型):undefined,null,boolean,number和string. typeof typeof null会返回“obj ...

  5. javascript高级程序设计读书笔记

    第2章  在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...

  6. JavaScript高级程序设计 读书笔记

    第一章 JavaScript 简介 第二章 Html中使用JavaScript 第三章 基本概念 第四章 变量,作用域,内存 第五章 引用类型 第六章 面向对象 第七章 函数表达式 第八章 BOM 第 ...

  7. JavaScript高级程序设计-读书笔记(6)

    第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l        简单值:使用与JavaScript相同的语法,可以在JS ...

  8. JavaScript高级程序设计-读书笔记(1)

    第1章 JavaScript简介 JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: l        ECMAScript:提供核心语言功能: l        文 ...

  9. javascript高级程序设计 读书笔记1

    第二章  在HTML中使用JS 加载JS有三种:行内,head头部和外部链接JS   最好使用外部链接<script src="example.js" ></sc ...

  10. Javascript高级程序设计读书笔记(第六章)

    第6章  面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新 ...

随机推荐

  1. C# 程序集(Assembly)

    程序集 程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件.程序集只是逻辑上的划分,一个程序集可以只由一个文件组成,也可由多个文件组成.不管是单文件程序集还是多文件程序 ...

  2. 虚拟机安装的ubuntu不能联网解决

    安装双系统从没遇到的问题,再虚拟机上遇到了不能联网的问题: 下面给出我的解决方法(win10系统.ubuntu 16.04) 我的电脑-管理-设备管理器 看是否虚拟机的虚拟网卡在: 在去设置-控制面板 ...

  3. Spring-boot JDBC with multiple DataSources sample

    Spring-Boot's auto-configurer seems good for simple applications. For example it automatically creat ...

  4. 创建Maven project 提示pom.xml 首行错误

    背景 使用eclipse创建Maven SpringBoot 2.2.0 项目时报错,更换springboot 版本也不行,排除框架依赖原因.然后别人的eclipse创建的同样2.2.2 maven项 ...

  5. 使用php-vmstat遇到的麻烦

    workerman-vmstat是一个基于workerman的扩展,用于监听服务器应用对内存.cpu消耗的友好的查看功能,具体介绍可以去git上看:    https://github.com/wal ...

  6. Jmeter BeanShell笔记

    前言:beanshell是支持java语法的,因此当一些复杂的数据结构jmeter处理不了的时候,我们可以借助于java来实现 1,使用beanshell处理JDBC请求返回的值 数据库结构 当JDB ...

  7. JavaScript 对象属性与方法

    对象的创建: 1 字面量创建 var obj = {a:1,b:2}; 2 构造函数创建 var obj = new Object(); obj.a = 1; obj.b = 2; 3 Object. ...

  8. 吴裕雄 python 人工智能——基于Mask_RCNN目标检测(3)

    import os import sys import random import math import re import time import numpy as np import cv2 i ...

  9. 【PAT甲级】1091 Acute Stroke (30 分)(BFS)

    题意: 输入四个正整数M,N,K,T(K<=60,M<=1286,N<=128),代表每片的高度和宽度,片数和最小联通块大小.输出一共有多少个单元满足所在联通块大小大于等于T. tr ...

  10. mysql 存入数据库 中文乱码

    1.要保证数据库.表.字段都是utf-8的数据类型.排序一直即可. 数据库的在数据库属性里面改: 表的在设计表里面改: 字段的也是在设计表里面改: 常用命令: -- 检查字符集类型show varia ...