这章讲了 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 Windows) {
- document.write(propName);
- document.write("");
- }
来源: http://www.bubuko.com/infodetail-3518993.html