学习《JavaScript高级程序设计》----day01

Chapter1—基础篇


一、HTML中的Javascript

1.使用script标签

1.1 在script标签内部写代码,例如:

<script type="text/javascript" >
	//...some codes
</script>

1.2 从外部引用代码,例如:

<script type="text/javascript" src="index.js"></script>

2.script标签的相关属性

  • async:
    立即开始下载脚本,但不阻碍其他页面动。相当于告知浏览器立即下载,但延迟执行。
  • defer
    脚本可以延迟到文档完全被解析和显示之后再执行。
  • charset
    指定字符集,较少使用。
  • crossorigin
    CORS(跨域资源共享)配置。默认不使用。
  • integrity
    允许对比接收到的资源和指定的加密签名,以验证子资源的完整性。该属性可用于保证CDN(内容分发网络)不会提供恶意的内容。
  • language
    已废弃。
  • src
    要执行的外部文件。
  • type
    用于替代language属性,该值始终都是text/javascript

3.使用script标签的注意事项

3.1.当出现下列情况的时候(在标签内部写JS代码的同时也外部引用JS代码),浏览器只会下载并执行外部脚本文件:

<script src="test.js" type="text/javascript">
	//...some codes
</script>

例子:

index.html

<!DOCTYPE html>
<html lang="en">
	<head>
		meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</title>
	</head>
	<body>
	<script type="text/javascript" src="index.js">
		alert("执行内部代码");
	</script>
	</body>
</html>

index.js

console.log("执行外部代码");

运行结果:
在这里插入图片描述

二、语言基础

1.变量

  • var关键字:
    1.使用var声明的变量会自动提升到函数作用或全局作用域的顶部(即var 声明提升)。
    2.在函数内部定义变量时,若忽略var关键字,则在函数执行后该变量会被提升到全局作用域。
    代码如下(示例)

    console.log(a); //不会报错,打印undefined
    var a; // 声明提升到全局作用域顶部
    function test() {
    	console.log(b); //不会报错, 打印2
    	var b = 2; //变量b会提升到函数作用域的顶部
    	c = 23; //函数执行后,该变量会提升到全局作用域
    }
    console.log(c); //报错
    test();
    console.log(c); //不会报错, 打印23
    
  • let关键字:
    1.letvar类似,但是let声明的变量不会出现提升
    2.let声明的变量会出现暂时性死区,即在let声明变量之前使用该变量,会报错。
    3.在同一作用域中不可重复声明同一变量。
    4.不能使用let进行条件式声明。
    5.for循环中的let声明,JavaScript引擎在后台会为每个迭代循环声明一个新的迭代变量。
    代码如下(示例)

    console.log(d);//let声明的变量不会出现“提升”,在let声明变量之前使用该变量,出现暂时性死区
    let d;
    let d = 23;//报错,重复声明
    for (let i = 0; i < 5; i++) {
    	setTimeout(() => console.log(i), 0); //顺序打印 0 1 2 3 4
    }
    
  • const关键字:
    1.与let类似,但是在声明的同时也得初始化变量。
    2.const声明对于for-offor-in有特别的意义。
    3.在for循环中不能使用const来声明迭代变量。
    代码如下(示例)

    const f = 23;
    f = 24; //报错
    const arr = [1, 2, 3, 4, 5];
    for (const val of arr) {
    	console.log(val); //打印 1 2 3 4 5
    }
    
    // 错误示例
    for(const i = 0; i < 5; i++){
    	console.log(i);
    }
    

2.JavaScript中基本数据类型

JS中有6中基本数据类型Undefined、Null、Boolean、String、Number、Symbol

  • Undefined 类型:
    Undefined类型只有一个值,即undefined;当一个变量未初始化时,它的值默认为undefined
    代码如下(示例)
    let a;
    console.log(a === undefined); //true
    console.log(typeof a); // "undefined"
    
  • Null 类型:
    Null类型只有一个值,即null,逻辑上null表示一个空对象指针,因此typeof 返回的值是"object"
    代码如下(示例)
    let b = null;
    console.log(typeof b); // "object"
    
  • Boolean 类型:
    1.Boolean有两个字面值truefalse
    2.可以通过Boolean()转型函数将其它类型的值转换为Boolean类型的值。
    代码如下(示例)
    let c = false;
    console.log(typeof c); //boolean
    console.log(Boolean(a)); // false
    console.log(Boolean(b)); // false
    
  • Number 类型:
    1.Number类型使用IEEE754格式表示整数和浮点数。
    2.最小值保存在Number.MIN_VALUE中,值为5e-324;最大值保存在Number.MAX_VALUE中,值为1.7976931348623157e+308
    3.进行浮点数的等值比较时应当注意到浮点数的精确度最高可达17位小数。如 0.1 + 0.2 != 0.3
    4.NaN,表示不是数字,使用0除任何值的结果都是NaN;其他类型的数据转为Number失败时,结果都是NaN
    5.使用Number()parseInt()parseFloat()将其它类型的数据转为Number类型的数值。
    代码如下(示例)
    let d = 076; //八进制数字
    console.log(d);
    let e = 0xA6; //十六进制
    console.log(e);
    console.log(Number(a)); //NaN
    console.log(Number(b)); //0
    console.log(Number(c)); //0
    console.log(Number("0123")); //123
    console.log(Number("")); //0
    console.log(Number("0xA6")); //166
    console.log(Number.MAX_VALUE); //1.7976931348623157e+308
    console.log(Number.MIN_VALUE); //5e-324
    
  • String 类型:
    1.toString()方法,将其他类型的数据转换为String类型的值,几乎其他所有类型的值都有toString()方法,但nullundefined没有。
    2.String(),将其他类型的数据转为String 类型与toString()类似,但是对nullundefined会回"null""undefined"
    3.模板字面量`${variable}`。
    代码如下(示例)
     console.log(c.toString()); //false
     console.log(String(a)); //undefined
     console.log(`\u03a3 ${c}`); //Σ false
    
  • Symbol 类型:
    1.Symbol是原始值,且Symbol实列唯一和不可变。主要用途是避免对象属性冲突。
    2.Symbol(),生成Symbol实例。
    3.通过Symbol.for()进行共享和重用Symbol实例,在全局符号表中创建。
    4.Symbol.iterator表示一个方法,该方法返回对象默认的迭代器。由for-of使用
    代码如下(示例)
     let g = Symbol();
     console.log(typeof g); //symbol
     let gloabalSymbol = Symbol.for("foo");
     let reuseSymbol = Symbol.for("foo");
     console.log(gloabalSymbol === reuseSymbol); //true
    
     class Emitter {
        constructor(max) {
            this.idx = 0;
            this.max = max;
        }
        *[Symbol.iterator]() {
            while (this.idx < this.max) {
                yield this.idx++;
            }
        }
     }
    
    function count(n) {
    	const emitter = new Emitter(n);
    	for (const x of emitter) {
        	console.log(x);
    	}
    }
    count(5); //打印 0 1 2 3 4
    
  • typeof操作符,typeof 操作符返回的值是下列字符串之一:
    "undefined""function""string""number""boolean""object""symbol"
    代码如下(示例)
    let t1;
    let t2 = null;
    let t3 = false;
    let sum = (a, b) => a + b;
    let str = "dwcw";
    let num = 1.56e+6;
    let obj = {
    		name:'lili',
    		age:23
    	};
    let s = Symbol("we");
    
    console.log(typeof t1); // undefined
    console.log(typeof t2); // object
    console.log(typeof t3); // boolean
    console.log(typeof sum); // function
    console.log(typeof num); // number
    console.log(typeof str); // string
    console.log(typeof obj); // object
    console.log(typeof s); // symbol
    

3.JavaScript中操作符

  • 按位非(~):
    返回数字的补数。

    let a = 123;
    console.log(~a); //-124
    
  • 按位与(&):
    返回两个数字的与值。

    let a = 123;
    let b = 111;
    console.log(a & b); //107
    
  • 按位异或(^):
    返回两个数字的异或值。

    let a = 123;
    let b = 111;
    console.log(a ^ b); //20
    
  • 左移(<<):
    将数字的二进制数的所有位向左移。

    let a = 1123;
    console.log(a >> 5); // 3
    
  • 有符号右移(>>):
    将数字的二进制数的所有非符号位右移。

    let a = 123;
    console.log(a << 5); //3936
    
  • 无符号右移(>>>):
    将数字的二进制数的所有位向右移。

    let a = 123;
    console.log(a >>> 5); // 3
    
  • 逻辑非(!):
    返回布尔值。

    let a = 123;
    console.log(!a); // false
    console.log(!!a); // true
    
  • 逻辑与(&&):
    返回布尔值。

    let f1 = true,
    	f2 = false;
    console.log(f1 && f2);// false
    
  • 逻辑或(||):
    返回布尔值。

    let f1 = true,
    	f2 = false;
    console.log(f1 || f2);// true
    
  • 指数操作符(**):
    a ** b表示a的b次方。

    let a = 2,
    	b = 3;
    console.log(a ** b);// 8
    
  • 等于(==)和不等于(!=):
    1.这两个操作符都会先进行类型转换(强制类型转换),再确定两个操作数是否相等。
    2.如果任一操作数是布尔值,则先将其转换为数值(true–>1, false–>0),再进行比较。
    3.如果一个数字一个是字符串,则将字符串尝试转换为数字,再进行比较。
    4.如果一个是对象另一个不是,则将对象调用valueOf()方法取得其原始值,再根据前面的规则比较。
    5.如果两个都是对象,则看它们是否指向同一个对象,是则返回true;否则返回false
    6.nullundefined相等。
    7.如果有一个是NaN不相等(!=)返回true, 相等(==)返回false

    console.log(null == undefined); //true
    console.log("12" != 12); //false
    console.log("err" == 12); //false
    console.log({} == {}); //false;
    
  • 全相等(===)和全不相等(===):
    这两个操作符不会进行类型转换。

    console.log(null === undefined); //flase
    console.log("12" !== 12); //true
    console.log("err" !== 12); //true
    console.log({} === {}); //false;
    
  • for-in:
    是一种严格的迭代语句,用于枚举对象中的非符号键属性。

    const book = {
    	id:123,
    	author:"佚名",
    	publishedDate:"2022/2/5",
    	bookName:"《JS》"
    	};
    for	(const prop in book){
    	console.log(`${prop} : ${book[prop]}`);
    }
    
  • for-of:
    是一种严格的迭代语句,用于遍历可迭代对象的元素 。

    const arr = [1, 2, 3, 4, 5];
    for	(const item of arr){
    	console.log(item);
    }
    
  • 注意:
    两个操作数相加,只要其中有一个是字符串,就会将另一个(如果不是字符串)转换为字符串,然后将两个字符串按照操作数出现的顺序进行拼接,得到一个字符串。

    let a = 123;
    let b = "q";
    console.log(a + b) ;// 123q
    console.log(b + a) ;// q123
    

总结

以上内容主要是通过学习《JavaScript高级程序设计》总结而得出,初次发表博客,有不足之处,欢迎大家直到评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值