JS代码编写位置:
1.标签属性中:(不方便维护,不推荐使用) 1.可以将js代码写入标签的onclick属性中 οnclick="alert("21");" 2.可以将js代码写入超链接的href属性中,当点击超链接时会执行js代码。<a href="javascript:;">点击</a> //可以点但是点击无反应。
2.写在script标签中。<script type="text/javascript"> </script> 中,通常写在body下方。
3.写在外部js中 通过 <script type="text/javascript" src="js/jstest.js"> </script> 引入。
数据类型:
ES6 有8种:
String 字符串
Number 数值
Boolean 布尔值
Null 空值
Undefined 未定义
Symbol
BigInt
Object 对象
特殊的反斜线
标识符:可含有字母数字_$ 但不能以数字开头。
\' 表示 ' \" 表示 " \\表示 \ \n 换行 \t 制表符   空格
infinity表示正无穷,-infinity表示负无穷 , NaN表示 not a number 使用typeof检查infinity,NaN也会返回number |
null表示什么都没有,表示一个空对象引用。 用 typeof 检测 null 返回是object。 你可以设置为 null 来清空对象:// 值为 null(空), 但类型为对象 |
undefined 是一个没有设置值的变量。 typeof 一个没有值的变量会返回 undefined。 你可以设置为 undefined 来清空对象:任何变量都可以通过设置值为 undefined 来清空。 类型为 undefined. |
null 和 undefined 的值相等,但类型不等。
强制类型转换
1. 强制 转为string:
toString()方法 或 调用String函数
var a1=123;
var b1=a.toString(); //string
//方法一:调用被转换类型的toString()方法(不影响原变量,会给出返回值)
var a2=234;
var b2=String(a2);
console.log(typeof b2); //string
//方法二:调用String函数,将a转化为字符串;
任何值和字符串相加都会先转换为字符串,再拼串;
var aa1="lbw",bb1="666";
var result=aa1+bb1;//任何值和字符串相加都会先转换为字符串,再拼串;
console.log(result);
2.强制 转为number :
Number()方法 (若字符串有非数字或者未定义则转为NaN)
parseInt(); 作用是将参数(通常为字符串)强制转换为整数。
parseFloat(); 函数可解析一个字符串,并返回一个浮点数。
var a3='22';
a3=Number(a3);
console.log(typeof a3); //number
//方法一:调用Number()函数
var a4='221.1px';
a41=parseInt(a4); //parseInt可将字符串中有效的整数取出;
a42=parseFloat(a4); //parseInt可将字符串中有效的整数和小数取出;
console.log(a41,a42);
//方法二:parseInt()将一个字符串转换为整数;parseFloat()将一个字符串转换为浮点数
在js中,表示16进制数字要以0x开头,8进制要以0开头,2进制要以0b开头(有的浏览器不支持)
可以在parseInt()中传递第二个参数来指定进制
var a51=0xff; //16进制
var a52=070; //8进制
var a53=0b10; //2进制
console.log(a51,a52,a53);//255 56 2
var a54="070";
a54=parseInt(a54,8);//将其视为8进制转换
console.log(a54);//56
减法,乘法,除法则是转换为数字再运算;(可利用这一特点做隐式转换为Number)
3.强制转换为boolean值:
数字中 0 和 NaN 为false,字符串中 空串 为false,其余均为 true;
null 和 undefined为false;
与&&运算:若两值均为true或均为false,则返回后者; 若一个 false,一个true,返回flase
var a1 = 6 && 1;
console.log(a1); // 1
var a2 = 0 && NaN;
console.log(a2); // 0
var a3 = 6 && undefined;
console.log(a3); // undefined
或 || 运算:若第一个值为true,直接返回第一个值;若第一个值为false,返回第二个值.
var r1=NaN||0;
console.log(r1);//0
条件表达式(三元运算符) 条件表达式?语句1:语句2;
条件表达式为true 执行语句1,为false 执行语句2
JavaScript 中有严格比较和类型转换比较:
- 严格比较(例如 ===)在不允许强制转型的情况下检查两个值是否相等;
- 抽象比较(例如 ==)在允许强制转型的情况下检查两个值是否相等。
=== 全等; !== 不全等
JavaScript 中的作用域(scope):
在 JS中,每个函数都有自己的作用域。只有函数中的代码才能访问函数作用域内的变量。
一个作用域可以嵌套在另一个作用域内。如果一个作用域嵌套在另一个作用域内,最内部作用域内的代码可以访问另一个作用域的变量。
-在全局作用域中有一个全局对象window,它代表一个浏览器的窗口,由浏览器创建,我们可以直接使用。
-在全局作用域中,创建的变量都会作为window对象的属性保存;创建的函数都会作为window对象的方法保存。
全局变量和局部变量
1.全局变量: 在代码任何位置都可以使用。
在全局作用于下声明的变量。注意:函数内部 没有声明直接赋值的变量也属于全局变量。
2.局部变量: 仅在该函数内部使用。
函数内部声明的变量。函数形参也属于局部变量。
从执行效率来看:
全局变量 在浏览器关闭时才会销毁,比较占内存资源;
局部变量 当我们程序执行完毕就会销毁,比较节约资源。
变量提升与函数提升
变量提升值只提升变量名的声明(提升无赋值);
函数提升优先级高于变量提升的优先级,函数a与变量a同时提升则为函数a。
变量的声明提前(变量提升):-使用var关键字声明的变量,会在所有代码执行之前被声明,但是赋值还是在原行。
函数的声明提前(函数提升):-使用 function 函数(){} ,它会在所有代码执行前被创建完成。