1.变量
变量名称命名规范:
1.首字母只能英文字母或_或$
2.不能使用关键字(var)或保留字符,如:var for if else break continue while let const function等等
3.驼峰命名:取有意义的名字,不要a,b,c,无意义
弹出框,输入框
提示框:alert(“hello”)
询问框:confirm(“是否删除?”);
输入框:prompt(“请输入性别”);
控制台打印输出:console.log(“你好”);
输出到页面:document.write(“
JavaScript”)
js引入方式:
1.行内js:代码可读性差<br /> 2.内部js:应用于当前页面,其他页面无法使用<br /> 3.外部js: 推荐使用该方式
2.数据类型:
简单(基本)数据类型
复杂数据类型
对象(Object)、数组(Array)、函数(Function)
instanceof :
判断复杂数据类型,测试 左边的对象 是否是 右边类 中的一个实例,返回布尔值(true false)
数据类型转换
1.字符串转换为数字
字符串(前提:纯数字的字符串,以数字开头的字符串)转换为数字
parseInt() 从第一位开始 到 第一位的非数字字符结束,提取字符串开头位置的整数部分。
parseFloat() 从第一位开始到第一位的非数字字符结束,提取字符串开头位置的整数部分+小数部分。
隐式转换 (前提:纯数字的字符串) - / “2” 2 == 4
var str1 = ‘123’;
console.log(typeof str1); //string
console.log(typeof parseInt(str1)); //numbervar str2 = '123a'<br /> console.log(parseInt(str2)); //123
var str3 = '1a23';<br /> console.log(parseInt(str3)); //1
var str4 = '123.456'<br /> console.log(parseInt(str4));//123<br /> console.log(parseFloat(str4));//123.456
// Number() 将字符串(前提:纯数字),布尔值转换为数字<br /> var str5 = '123456';<br /> console.log(typeof Number(str5));//number
var str6 = '123a';<br /> console.log(Number(str6)); //NaN (not a number)
**补充:isNaN() 方法,检测一个数值是否是NaN**<br />** 如果 某个数值是NaN,isNaN()方法返回的是true;否则返回false。**<br /> console.log(isNaN(Number(str6))); //true
2.数字转换为字符串
var num1 = 147;
var res = num1.toString();
console.log(typeof res); //string
console.log(‘—————————————————-‘);
3.转换为布尔类型
console.log(Boolean(0)); //数字类型的值,只要不是0或NaN,转换为布尔类型之后都是true
console.log(Boolean(NaN)); //false
console.log(Boolean(‘’)); //字符串类型的值,只要不是空字符串,转换为布尔类型之后都是true
console.log(Boolean(undefined)); //false
console.log(Boolean(null));
- 数字,字符串,布尔值互相转换,且出现 NaN,undefined,null,0 ,’ ‘,false都为假
反引号
模板字符串使用反引号代替普通字符串中的单引号、双引号
模板字符串中有特定的语法 用${}作为占位符.
变量提升
先使用再声明不会报错
// 先声明
// 再使用
var num1 = 10; //声明
var res = num1 + 1; //使用
// 由于js中存在变量提升的现象(仅仅是提升了变量的声明)
// 所以 我们可以 在声明之前去使用变量。
// 代码在编译和运行时不会报错。
console.log(num2 + 10); //NaN
var num2 = 20;
// 相当于执行了以下代码:
// var num2;
// console.log(num2 + 10);
// num2 = 20;
严格模式 :”use strict”
消除不合理
(不声明就使用会报错)
哪里用到就在哪声明,可以是某个函数中,也可以是整个script
ES6中的let 和 const
let
1.使用let声明变量,不存在变量提升的问题
2.let声明的变量能够形成块级作用域block
const
1.声明“常量”,常量是不能发生改变的量,
2.也能形成块级作用域
总结:var let const的区别
1.var存在变量提升,let和const都不具备
2.能否形成块级作用域,var不能,let和const都可以
3.值能否发生改变:const不能,var和let都可以
作用域 Scope
全局作用域 Global<br /> 脚本作用域script<br />脚本作用域只针对let const声明的变量或常量<br /> 局部作用域(函数作用域) Local<br /> 块级作用域bolck:<br />let,const声明的变量能够形成块级作用域,块级作用域中声明的常量或变量只能在块级作用域中使用
全局变量:在全局作用域中定义的变量,它在任何地方都可以使用<br />如果用**var声明**的变量,该变量会被绑定在window身上,作为window的属性<br />如果用**let**声明的变量或**const**常量,不会被绑定在window身上,不能使用window.XXX访问<br /> 局部变量:在局部作用域中定义的变量或常量,它只能在局部作用域中使用
var x = 10;
function fun1() {
var y = 20;
}
fun1()
// console.log(y); //报错: y is not define (y变量没有定义)
作用域链:
简单说就是查找变量的规则(顺序),访问变量时,先在当前作用域中查找,如果不存在则向上一级查找,直到全局作用域为止
<script>
// 作用域链:简单说就是查找变量的规则(顺序)
// 访问变量时,先在当前作用域中查找,如果不存在则向上一级查找,直到全局作用域为止
var x = 10;
function fun1() {
var x = 1;
var y = 20;
return x + y; //此时 x 指的是谁?
}
console.log(fun1());
// 练习
// 例1
var a = 1;
function fun2() {
console.log(a); //? undefined 变量提升
var a = 10;
// var a;
// console.log(a);
// a = 10;
}
fun2();
// 例2
var b = 5;
function fun3() {
var b = 15;
function fun4() {
// var b = 25;
console.log(b); // ?
}
fun4();
}
fun3();
// 例3
// var z = 10;
// function fn1() {
// console.log("fn1:"+z); //?
// }
// function fn2() {
// z = 100;
// console.log("fn2:"+z); //?
// fn1();
// }
// fn2();
// 变形
var z = 10;
function fn1() {
console.log("fn1:"+z); //? 10 全局作用域中的z
}
function fn2() {
var z = 100;
console.log("fn2:"+z); //? 100 局部作用域(fn2)中的z
fn1();
}
fn2();
</script>