第三章 基本概念

3.1 语法

3.1.1 区分大小写

ECMAScript中的一切(变量,函数,操作符)都区分大小写的

3.1.2 标识符

标识符:变量,函数,属性的名字以及函数的参数。
标识符的命名规则(驼峰法):
1>标识符由字母,数字,下划线()或美元符号($)组成;
2>标识符的第一个字符串必须是字母,下划线(
),美元符号($);
3>第一个字母小写,剩下的买个单词的首字母都要大写。

注意:关键字,保留字,true,false和null不能用作标识符

3.1.3 注释

主要有两种注释:
1> 单行注释: // 这是单行注释
2> 多行注释(块级注释):
/* * 这是多行注释 * 块级注释 */

## 3.2 关键字和保留字

关键字: 一组具有特定用途名词,关键字可以用来表示控制语句的开始或结束,或者用于执行特定的操作;
保留字:当前没有任何特定的用途,将来可能会被用作关键字的一组名词

3.3 变量

js中的变量是松散类型的,可以用来保存任何类型的数据,var声明的变量是局部变量。

function test(){
            var message = '函数内的变量';
            console.log(message);
        }
        test() // 函数内的变量
        console.log(message); // Uncaught ReferenceError: message is not defined

上述代码中在函数外部调用函数内部的变量message时报错,原因是函数内部定义的变量message作用域是函数体内,这个变量会在函数调用是创建,调用结束后就会立即销毁。从而使的在函数外部调用报错:
message is not defined

3.4数据类型

五种基本数据类型:Undefined,Null,Boolean,Number,String;
一种复杂数据类型:Object

3.4.1 typeof操作符

用来检查数据类型,typeof的检查对象可以是变量,也可以使字面量

 function test(){
            var message = '函数内的变量';
            console.log(message);
        }
 var message = 'helloWorld'
 console.log(typeof message)     // string
 console.log(typeof 4)           // number
 console.log(typeof test)        //function
 console.log(typeof null)        //object
 console.log(typeof undefined)   //undefined
 console.log(typeof true)        //boolean

3.4.2 Undefined类型

声明变量,但是没有对其进行初始化,这个变量的值就是undefined。
引入这个值是为了区分空对象指针与未经初始化的变量.
建议:声明变量时对其进行初始化。

var message;
alert(message === undefined)

3.4.3 Null 类型

null表示空对象的指针,这就是为啥用typeof检查null的时候返回的是object

var message = null;
console.log(typeof message)

建议:如果定义一个变量是用来保存对象的,那么初始化的时候可以将其值设定为null

3.4.4 Boolean类型

boolean是使用最多的一种类型,该类型只有两字面值:true,false.

注意:字面值true和false是区分大小写的!!!!!

虽然boolean只有俩字面值,但是js中的所有的类型值都可以转换为与boolean值等价的值。可以调用方法Boolean().

var message;
alert(Boolean(message))  // true

3.4.5 Number类型

Number类型的数据主要有两种:整数和浮点数(小数)。
常用的十进制数表示,同时也有八进制,十六进制表示。八进制表示法以0开始,后面的数字必须小于8,否则会识别为十进制数。十六进制的以0x开始.

    var num_1 = 9;
    var num_2 = 070;
    var num_3 =08;
    var num_4 = 0x1a;
    console.log(num_1);  // 9
    console.log(num_2);  // 56 (有效的八进制数)
    console.log(num_3);  // 8 (无效的八进制数,按十进制输出)
    console.log(num_4);  // 26(有效的十六进制数)
    console.log(num_2+num_4);  // 82 (转换成十进制进行计算的)

注意:无论是八进制数还是十六进制数,在进行算术计算的时候都会转换成十进制数数值

3.4.5.1 浮点数值

浮点数必须包含一个小数点,小数点后面必须要有数字。
因为浮点数需要的内存空间是整数的两倍,所以es会及时的将浮点数转换为整数保存。

var num_1 = 1. // 小数点后面没有数字,被转换为整数1进行保存
var num_2 = 10.0 // 10.0本身就是一个整数,也会按整数10进行保存

浮点数的最高精度是17位小数,但是在进行算数运算的时候精度没有整数的高。(浮点数进行数值运算的时候会产生舍入误差)

alert(0.2+0.1); // 0.30000000000000004

JS的浮点数是遵循IEEE 754标准,采用双精度存储(double precision),使用64位固定长度来表示,其中1位用来表示符号位,11位用来表示指数,52位表示尾数.十进制的0.1和0.2会转换成二进制的,但是由于浮点数用二进制表示是无穷的,而IEEE754标准的64位双精度浮点数的小数部分最多支持53位二进制,多余的二进制数字被截断,所以两者相加之后的二进制之和的长度超过了52位,截取能识别的52位二进制数在转换为十进制后就会出现误差问题

3.4.5.2 数值范围

ECMAScript能够表示的最大值和最小值是保存在Number.MAX_VALUE和Number.MIN_VALUE中的。要想判断是不是无穷大或者无穷小的话 可以使用isFinite()方法判断。只要数值位于最小值和最大值之间就会返回true

    alert(Number.MAX_VALUE); //1.7976931348623157e+308
    alert(Number.MIN_VALUE); //5e-324

3.4.5.3 NaN

NaN(非数值)是一个特殊的数值。任何数除以非数值都会返回NaN.
NaN有两非常特殊的特点:
1>任何有关NaN的操作都会返回NaN;
2>NaN与任何数值都不想等,包括NaN本身。
isNaN()方法:用来判断传入的参数是不是数值,如果是(包括可以转换为数值)返回false,反之返回true。isNaN()会调用对象的valueOf()和toString(),如果可以被转换成数字则返回false

    alert(isNaN(NaN))   //true
    alert(isNaN('blue'))//true
    alert(isNaN([1,2])) //true(数组元素超过两个就是true)
    alert(isNaN(10))    //false
    alert(isNaN('10'))  //false
    alert(isNaN(true))  //false
    alert(isNaN([]))    //false
    alert(isNaN([1]))   //false
    alert(isNaN([1, 2]))   //true

3.4.5.4 数值转换

有三个方法可以把非数值转换为数值:Number(),parseInt(),parseFloat()。
Number():可以用于任何数据类型,parseInt()和parseFloat()只用与将字符串转化为数值。

3.4.6 String类型

String类型是表示由领个或者多个字符组成的字符序列,叫做字符串。
字符串的特点:字符串一旦创建,值就不可改变,要改变某个变量中保存的字符串,首先就要先销毁,然后在用新的字符串去填充这个变量。
其他的值转换为字符串的话有两种方式:
1> toString()方法
该方法在转换数值的时候默认的是十进制,即无参数时。同样的本方法可以传递数值转换字符串是使用的进制数(2,8,16进制)
该方法不能转换null,undefined
2> String()方法可以转换任何类型的
转化规则:
如果值有toString()方法则调用这个方法转换;
如果是null则转换为‘null'
如果是undefined则转换为’undefined’

3.4.7 Object类型

javascript高级程序设计学习历程的更多相关文章

  1. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  2. JavaScript高级程序设计学习(四)之引用类型

    在javascript中也是有引用类型的,java同样如此. javascript常见也比较常用的引用类型就熟Object和Array. 一个对象和一个数组,这个在前后端分离开发中也用的最多.比如aj ...

  3. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  4. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  5. JavaScript高级程序设计学习(四)之引用类型(续)

    一.Date类型 其实引用类型和相关的操作方法,远远不止昨天的所说的那些,还有一部分今天继续补充. 在java中日期Date,它所属的包有sql包,也有util包.我个人比较喜欢用util包的.理由, ...

  6. javascript 高级程序设计 学习笔记

    <!--<script> // 异步请求封装 IE6即以上浏览器 // ajax(url,fnSucc,selectID,fnFaild) //url 请求地址 //fnSucc 异 ...

  7. JavaScript高级程序设计---学习笔记(二)

    面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直 ...

  8. JavaScript高级程序设计学习(一)之介绍

    作为一名web开发人员,日常用的最多的就是js,也就是大名鼎鼎的ECMAScript,又称javascript.再次声明js与java除了语法上相似,没有半毛钱关系.据说之所以叫javascript, ...

  9. JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承

    相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...

随机推荐

  1. ensorFlow的安装

    WIN7 64位系统 参考了  https://blog.csdn.net/appleyuchi/article/details/71036785 尝试了各种版本,,最后必须python安装3.60版 ...

  2. Nacos 知识点

    Nacos 名字的由来(取红色的英文字符): Dynamic Naming and Configuration Service Nacos 是 Spring Cloud Alibaba 的一个组件,详 ...

  3. LG2530 「SHOI2001」化工厂装箱员 高维DP+记忆化搜索

    问题描述 LG2530 题解 设\(opt[i][a][b][c][d]\)代表装到第\(i\)个后,第\(1,2,3\)手上分别还剩\(a,b,c\)个的最小操作数. 记忆化搜索即可. 启示:如果状 ...

  4. js正则表达式常用方法总结

    1.test()  方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false. var patt = /e/; patt.test("The ...

  5. scrapy机制mark(基于twisted)

    twisted twisted管理了所有的异步任务 Twisted的主线程是单线程的,即reactor线程: 而这些io耗时操作会在线程池中运行,不再twisted主线程中运行,即通过线程池来执行异步 ...

  6. CSP2019 树的重心 题解

    本题当然可以通过大力讨论每棵子树的size的大小关系,然后用各种数据结构暴力维护.但是我更倾向于用一种更为性质的做法. 首先讲一下我在考场上想到的做法(没写).就是考虑换根,在换根的过程中计算每一条边 ...

  7. 计时任务之StopWatch

    StopWatch对应的中文名称为秒表,经常我们对一段代码耗时检测的代码如下: long startTime = System.currentTimeMillis(); // 业务处理代码 doSom ...

  8. Ubuntu安装完搜狗后,更改ctrl+shift切换输入法

    1.打开搜狗设置 2.更改Scroll between Input Method即可,我设置成了 ALT_SUPER(Win键)

  9. 如何为python 2.7安装tensorflow?

    “TensorFlow在Windows上支持Python 3.5.x和3.6.x.” 因此,您无法在Windows上使用Python 2.7的tensorflow 如果您被迫使用Python 2.7, ...

  10. 全局安装npm包报错没有权限

    背景:npm i npm-check -g 时报错没有权限 Error: EACCES: permission denied, access '/usr/local/lib/node_modules' ...