这本书一共有900多页,可以直接从第3章46页开始看,这章主要介绍JS的语法基础知识
标识符
1、js中的标识符推荐驼峰大小写形式, 例如:firstName, 第一个单词的首字母小写,后面单词首字母大写。 与python是不一样的,python用下划线表示, first_name。
2、 js的注释与c、java是一样的,单行注释 // 多行注释 / /
3、定义变量需要关键字用 var, let 或者 const 来声明
var、let、const
这3个关键字都是用来声明变量的,现在详细介绍他们各自的用途和特点
var num = 10;
var 关键字声明的变量是局部变量, 如果是函数中定义的变量,函数执行完之后改变量就被销毁。和python 中不同的是, 在函数中用var定义局部变量,可以先引用变量,变量的定义放在后面,例如:
function hello (){
console.log(age);
var age = 10;
}
hello();
代码不会报错,也不是打印出10, 而是输出结果 undefined, 这是因为在函数中声明的变量会自动“提升”到该函数作用域的顶部,等价于
functioni hello(){
var age;
console.log(age);
age=10;
}
let 关键字与var作用差不多,区别在于,let声明的范围更小,是块作用域。 所谓块作用域,if,for、while 这些语句块都是块作用域。
if(true){
let yes="yes";
}
console.log(yes);
这里就会报错提示yes变量没有定义,因为已经超过了if语句块, 如果是var关键字定义,则没有这样的问题。
let 与 var 的另一个区别是,let 声明的变量不会自动提升到作用域的顶部,因此不能先引用再定义。
if(true){
console.log(yes);
let yes="yes";
}
这个就会报错 ReferenceError。
var 与 let 的第三个区别, var 在全局作用域中声明的变量会成为window对象的属性, 而 let 声明的变量不会
var name="chrome"
let name2= "ie"
console.log(window.name) //chrome
console.log(window.name2) //undefined
const 与 let 相似,作用域也是块级作用域,不同的地方是声明变量的同时必须将变量进行初始化,同时不同给该变量重新赋值,其实就是用来定义常量的。
const num = 4;
num = 6;
上面会报错,因为常量是不能被重新赋值的。
总结一点:优先使用const, let次之, 能不用var就不用var
数据类型
JS中一共有7种数据类型,分别是Undefined, Boolean, String, Number, Null, Symbol 6个简单数据类型 和 Object 这个复杂数据类型。
typeof 操作符可用来检查变量属于何种类型
console.log(typeof 1); // number
console.log(typeof null); //object
console.log(typeof "hello"); //string
console.log(typeof undefined); //undefined
console.log(typeof true); // boolean
console.log(typeof {name: "tou"}); //object
Undefined 类型的数据就一个值叫 undefined, 当 用 var 或 let 声明的变量还没赋值时,这个变量的类型就是undefined
Null类型的值也只有一个null, 表示空对象, 通常如果变量是用于保存对象值时,初始化就可以用null赋值,等真正有了对象值时再重新赋值。
let car = null;
car = {weight:100};
if (null==undefined){
//
}
undefined 与 null 的表面值是相等的,因为undefined 是从null派生而来的,但是二者的用途有着明显的不同, undefined 就是表示变量尚未初始化, 而null表示变量现在是空值,将来可以用其它对象填充。
Boolean 类型值有true和false, 其它任何类型的数据都可以通过函数 Boolean()转换为Boolean类型的true或者false,在 if 条件语句中,javascript会自动将该数据转换为对应的Boolean类型的值。
Number类型分为整型和浮点型,和其它语言基本是一样的, Number类型中还有3个特殊的值, NaN ,Infinity, -Infinity ,后面两个好理解,无穷大和负无穷大。 NaN 表示“不是数”,"不是数"是个特殊数,比如 0/0,其它语言直接报错, 而在JavaScript中,他会返回NaN值.
console.log(0/0); //NaN
console.log(5/0); //Infinity
console.log(-5/0); //-Infinity
NaN 与任何值比较都不相等,即使与NaN比较也不相等
console.log(NaN==NaN) //false
判断一个值是否可以转换为数值类型可以用函数isNaN(), 返回false 就可以转换
console.log(isNaN("10")); // false , 可转换为10
console.log(isNaN("red")); // true 不是数值,不能转换
console.log(isNaN(true)); //false , 可转为1
将其它类型值转换为数值类型有三个函数, Number(), parseInt(),parseFloat()。 Number 函数可将任何类型的值转换为数值, 后两个主要是用于将字符串转为数值。
console.log(Number("red")); //NaN
console.log(Number(true)); //1
console.log(Number(false)); //0
console.log(Number("")); //0
console.log(Number("10")); //10
console.log(Number(undefined)); //NaN
console.log(Number(null)); //NaN
对于对象,先调用对象的valueOf方法,如果是NaN,再调用对象的toString方法。
console.log(parseInt("12xxx")); //12
console.log(parseInt("")); //NaN
parseInt 默认按10进制转换, 也可以指定进制
console.log(parseInt("10", 2)) //2
console.log(parseInt("10", 8)) //8
console.log(parseInt("10", 10)) //10
console.log(parseInt("10", 16)) //16
String
javascript 中的字符串可以使用双引号(")、单引号(')或反引号(`)标示。
javascript中除了null和undefined之外的值都有一个toString()方法,可以将其转换为字符串。当你不确定变量是否为null或undefined的时候,又需要调用toString()方法时,怎么办?可以先调用 String()转型函数,将其装换为复杂数据类型Object
let a;
console.log(a.toString()); // 报错
console.log(String(a).toString()); //undefined
反引号组成的字符串主要用途是模板字面量,主要用在html模板中,例如:
let value = "world";
let content = `
<html>
<body>
<div>
hello ${value}
</div>
</body>
</html>
`
symbol
暂时不做了解
Object类型
let obj = new Object();
Object 是其他所有对象的基类, 都有如下属性和方法
- toString()
- valueOf()
- hasOwnProperty()
- constructor
操作符
- 加减乘除
- 逻辑与或非
- 位操作,
- 比较操作
等于与不等于 (==)与 (!=) 会先进行强制类型转换,再做相等性比较,例如:
console.log("22"==22) //true
全等与不全等(===)与(!==) 不会进行类型转换
console.log("33"===33); //false
在做相等性判读时推荐使用后者。
语句
do{
console.log(i);
}
while(i++<10);
for in 语句,用于迭代变量中的元素,迭代的变量可以是任意对象,包括null 和 undefined。
for(const name in window){
console.log(name);
}
for of 也是用于迭代,不过他是更为严格的迭代,变量必须是可迭代的,如果是null就不行。其实window也不是可迭代对象,所有也会报错,可迭代对象都必须有一个next()方法。
for(num of [1,2,3,3,4]){
console.log(Math.pow(num, 2))
}
with 语句
将代码作用域设置为特定对象, 例如:
console.log(location.href);
console.log(location.hostname);
console.log(location.search.substring(1));
// 用with代替,
with(location){
console.log(href);
console.log(search.substring(1));
}
switch case 语句 用于替换大量的if else if 的场景
let i=0;
switch(i){
case 1:
console.log(i);
break;
default:
console.log("other");
}
函数
函数没有显式的return时,返回的是 undefined 对象。
关注公众号「Python之禅」,回复「1024」免费获取Python资源