《JavaScript高级程序设计》——第三章 基本概念
这章讲了JavaScript的语法、数据类型、流控制语句和函数。理解还是挺好理解的,但有很多和C、C++、Java不同的地方需要记忆。比如,
- JavaScript标识符可以由Unicode字符字符组成。
- JavaScript每条语句后面的分号也不是必需的,语句后面没有分号时,解析器会自己确定语句的结尾。
- “+”,“-”,“*”、“/”、“&&”、“||”、“!”对不同类型操作对象进行计算的规则是不同的。
- switch()括号内不像其他语言必须是字符或数字,而可以放任何类型数据。
- 函数和其他语言也不一样,函数内有个arguments对象用来访问参数数组,函数不介意传递来多少个参数,也不在乎传进来的参数是什么的类型;函数没有重载,如果存在相同的函数名,只会保存最后一个函数。
- 有个label标签语句在以后由break,continue引用
下面是这章做的笔记
typeof用来返回数据类型
var message = "some string";
alert(typeof message); //"string"
alert(typeof 95); //"number"
只声明不定义的变量的值为undefined
var message;
alert(message == undefined); //true
也可以用undefined显式初始化变量
var message = undefined;
alert(message == undefined); //true
没声明的变量除了typeof和delete操作,进行其他运算都会报错
var message; //this variable is declared but has a value of undefined
//make sure this variable isn't declared
//var age
alert(message); //"undefined"
alert(age); //causes an error
没声明的变量进行typeof操作返回值也是undefined
var message; //this variable is declared but has a value of undefined
//make sure this variable isn't declared
//var age
alert(typeof message); //"undefined"
alert(typeof age); //"undefined"
null的typeof操作返回"object"
var car = null;
alert(typeof car); //"object"
undefined派生自null,因此他们进行相等测试时,返回true
alert(null == undefined); //true
Boolean()可以将所有类型数据转换成布尔值
var message = "Hello world!";
var messageAsBoolean = Boolean(message); alert(messageAsBoolean); //true
流控制语句会自动将传进来的值转换成Boolean
var message = "Hello world!";
if (message){
alert("Value is true");
}
NaN与任何值都不相等包括他自己
isNaN()先尝试将接收到的值转换成数值,然后判断转换后的值是否是数字,如果是数字则返回false,否则返回true
alert(NaN == NaN); //false
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false � 10 is a number
alert(isNaN("10")); //false � can be converted to number 10
alert(isNaN("blue")); //true � cannot be converted to a number
alert(isNaN(true)); //false � can be converted to number 1
Number()将何种数据类型转换成数值
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
alert(num1);
alert(num2);
alert(num3);
alert(num4);
parseInt()可以识别出整型格式(二、八、十、十六进制)
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt("0xA"); //10 - hexadecimal
var num4 = parseInt(22.5); //22
var num5 = parseInt("70"); //70 - decimal
var num6 = parseInt("0xf"); //15 � hexadecimal
paseInt()如果指定了第二个参数,字符串可以不必带0、0x前缀
var num1 = parseInt("10", 2); //2 � parsed as binary
var num2 = parseInt("10", 8); //8 � parsed as octal
var num3 = parseInt("10", 10); //10 � parsed as decimal
var num4 = parseInt("10", 16); //16 � parsed as hexadecimal
toString()返回一个值的字符串表现
var age = 11;
var ageAsString = age.toString(); //the string "11"
var found = true;
var foundAsString = found.toString(); //the string "true" alert(ageAsString);
alert(typeof ageAsString);
alert(foundAsString);
alert(typeof foundAsString);
toString()可以返回数值的二进制、八进制、十六进制、默认情况下返回十进制
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"
toString()不能转换null和undefined的值,而String()可以转换任意类型的值
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)); //"undefined"
“++”和“--”会将运算对象先转换成数值再进行递增、递减
var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
}; s1++; //value becomes numeric 3
s2++; //value becomes NaN
b++; //value becomes numeric 1
f--; //value becomes 0.10000000000000009
o--; //value becomes numeric �2 alert(s1);
alert(s2);
alert(b);
alert(f);
alert(o);
一元加减运算会将值转换成数值
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; //value becomes numeric 1
s2 = +s2; //value becomes numeric 1.1
s3 = +s3; //value becomes NaN
b = +b; //value becomes numeric 0
f = +f; //no change, still 1.1
o = +o; //value becomes numeric �1 alert(s1);
alert(s2);
alert(s3);
alert(b);
alert(f);
alert(o);
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; //value becomes numeric -1
s2 = -s2; //value becomes numeric -1.1
s3 = -s3; //value becomes NaN
b = -b; //value becomes numeric 0
f = -f; //change to �1.1
o = -o; //value becomes numeric 1 alert(s1);
alert(s2);
alert(s3);
alert(b);
alert(f);
alert(o);
“<<<”、“>>>”是无符号左移和无符号右移运算符
var oldValue = 64; //equal to binary 1000000
var newValue = oldValue >>> 5; //equal to binary 10 which is decimal 2
alert(newValue); //2
var oldValue = -64; //equal to binary 11111111111111111111111111000000
var newValue = oldValue >>> 5; //equal to decimal 134217726
alert(newValue); //134217726
“!”运算也是先将操作对象转换成布尔值在进行取非
“!!”相当于是Boolean()操作
alert(!false); //true
alert(!"blue"); //false
alert(!0); //true
alert(!NaN); //true
alert(!""); //true
alert(!12345); //false
alert(!!"blue"); //true
alert(!!0); //false
alert(!!NaN); //false
alert(!!""); //false
alert(!!12345); //true
逻辑与和逻辑或运算都存在逻辑短路现象
var found = true;
var result = (found && someUndeclaredVariable); //error occurs here
alert(result); //this line never executes
var found = false;
var result = (found && someUndeclaredVariable); //no error
alert(result); //works
var found = true;
var result = (found || someUndeclaredVariable); //no error
alert(result); //works
var found = false;
var result = (found || someUndeclaredVariable); //error occurs here
alert(result); //this line never executes
加性操作优先转换成字符串,减性操作优先转换成数值
var result1 = 5 + 5; //two numbers
alert(result1); //10
var result2 = 5 + "5"; //a number and a string
alert(result2); var num1 = 5;
var num2 = 10;
var message = "The sum of 5 and 10 is " + num1 + num2;
alert(message); //"The sum of 5 and 10 is 510"
var num1 = 5;
var num2 = 10;
var message = "The sum of 5 and 10 is " + (num1 + num2);
alert(message); //"The sum of 5 and 10 is 15"
全等“===”只在两个操作数未经转换之前就相等的情况下(数据类型一样)返回true,与之对应的是“!==”
var result1 = ("55" == 55); //true � equal because of conversion
var result2 = ("55" === 55); //false � not equal because different data types
var result1 = ("55" != 55); //false � equal because of conversion
var result2 = ("55" !== 55); //true � not equal because different data types
break与标签配合使用,跳出最外层循环
var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
continue与标签配合使用,使跳出最外层之外的循环
var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
num++;
}
}
alert(num); //95 i==5的那一层执行到5时跳出内层循环,继续执行外层循环
switch()括号内可以是任何数据类型
switch ("hello world") {
case "hello" + " world":
alert("Greeting was found.");
break;
case "goodbye":
alert("Closing was found.");
break;
default:
alert("Unexpected message was found.");
arguments对象可以和命名参数一起使用
function doAdd(num1, num2) {
if(arguments.length == 1) {
alert(num1 + 10);
} else if (arguments.length == 2) {
alert(arguments[0] + num2);
}
}
doAdd(10); //20
doAdd(30, 20); //50
JavaScript没有函数重载,后定义的同名函数会覆盖前面的函数
function addSomeNumber(num){
return num + 100;
}
function addSomeNumber(num) {
return num + 200;
}
var result = addSomeNumber(100); //300
alert(result);
for-in语句
for (var propName in window) {
document.write(propName);
document.write("<br />");
}
2020-04-23 18:29:22
《JavaScript高级程序设计》——第三章 基本概念的更多相关文章
- JavaScript高级程序设计 第三章 基本概念
ch3 基本概念 标签(空格分隔): JavaScript 语法 标识符 - 第一个字符必须是字母.下划线或美元 - 驼峰大小写格式 严格模式 ECMAScript5引入,定义了一种解析和执行模型.此 ...
- javascript高级程序设计第三章
看后总结: 1.区分大小写 2.标识符是有字母下划线$开头,并有字母.下划线.数字.美元符号组成. 3.建议用驼峰法命名标识符. 4.注释: 单行:// 多行: /* */ 5.严格模式: 在js ...
- Javascript高级程序设计 -- 第三章 -- 总结
1.Javascript有几种数据类型 2.变量 Javascript有几种数据类型 JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Nu ...
- 读书笔记 - js高级程序设计 - 第三章 基本概念
启用严格模式 "use strict" 这是一个 pragma 编译指示 让编码意图更清晰 是一个重要原则 5种简单数据类型 Undefined Null Boolean Num ...
- javascript高级程序设计第三章的一些笔记
[TOC] 1. 语法 1.1 区分大小写 变量.函数名和操作费都区分大小写. 1.2 标识符 标识符指变量.函数.属性的名字,或者函数的参数.标识符按以下规则组合: 第一个字符必须是一个字母,下划线 ...
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- 《JavaScript高级程序设计》——第二章在HTML使用JavaScript
这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...
- JavaScript高级程序设计学习(三)之变量、作用域和内存问题
这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...
- JavaScript高级程序设计第三版-读书笔记(1-3章)
这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript 提供核心语言功能 DOM 提供访问 ...
- 读书时间《JavaScript高级程序设计》三:函数,闭包,作用域
上一次看了第6章,面向对象.这里接着看第7章. 第7章:函数表达式 定义函数有两种方式:函数声明.函数表达式 //函数声明 function functionName(arg0,arg1,arg2){ ...
随机推荐
- Jmeter(二十四) - 从入门到精通 - JMeter函数 - 中篇(详解教程)
1.简介 在性能测试中为了真实模拟用户请求,往往我们需要让提交的表单内容每次都发生变化,这个过程叫做参数化.JMeter配置元件与前置处理器都能帮助我们进行参数化,但是都有局限性,为了帮助我们能够更好 ...
- 容器云平台No.10~通过gogs+drone+kubernetes实现CI/CD
什么是CI/CD 持续集成(Continous Intergration,CI)是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每 ...
- 刷题[CISCN2019 华东南赛区]Web4
解题思路 打开有一个链接,那先点击一下 发现url处,很像命令执行,试一试.发现无论是什么都是no response,又是各种尝试 发现直接传?url=/etc/passwwd可以爆出回显,难道不是命 ...
- E-Form++ for Windows CE源码库2020,嵌入式开放源码!
E-Form++ for Windows CE源码库2020! 现在就把这个下载到您的Windows CE中,体验极致HMI触摸. Windows CE评估版下载! 1. E-Form++ for ...
- 初学源码之——银行案例手写IOC和AOP
手写实现lOC和AOP 上一部分我们理解了loC和AOP思想,我们先不考虑Spring是如何实现这两个思想的,此处准备了一个『银行转账」的案例,请分析该案例在代码层次有什么问题?分析之后使用我们已有知 ...
- 适用于 deno 的多版本管理工具 dvm 发布
不知不觉中,deno 已经默默的发布了 3 个版本了: 0.1.0 0.1.1 0.1.2 昨晚通宵做了一个 deno 多版本的管理工具: dvm. github 地址: https://github ...
- Spring学习(二)--Spring的IOC
1.依赖反转模式 依赖反转:高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口.抽象接口不应该依赖于具体实现.而具体实现则应该依赖于抽象接口. 在面向对象编程领域中,依赖反转原则(Depe ...
- Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary
nametuple 是tuple扩展子类,命名元组,其实本质上简单类对象 from collections import namedtuple info = namedtuple("Info ...
- 基于GAN的特征抽取 Feature Extraction by GAN
InfoGAN 期望的是 input 的每一个维度都能表示输出数据的某种特征.但实际改变输入的一个特定维度取值,很难发现输出数据随之改变的规律. InfoGAN 就是想解决这个问题.在 GAN 结构以 ...
- CF538B Quasi Binary 思维题
题目描述 给出一个数 \(n\),你需要将 \(n\) 写成若干个数的和,其中每个数的十进制表示中仅包含\(0\)和\(1\). 问最少需要多少个数 输入输出格式 输入格式: 一行 一个数 \(n(1 ...