JS学习笔记
JS是脚本语言,是一种轻量级的编程语言,可以插入HTML页面的编程代码,插入HTML页面之后,可由现在所有的浏览器执行。
JS的引入方式
script标签内写代码,这是最常见的方式,但是在生产中一般用引入额外的JS文件,这样会使得代码清晰,容易阅读。
JS的变量声明
1.JS的变量名可以使用_,数字,字母,$组成,不能以数字开头
2.声明变量使用var 变量名的格式,但是在ES6中用let来声明变量,用法和var类似,但是所声明的变量只在let命令所在的代码块内有效,比如说for循环中就使用,es6新增了const来声明常量,一旦声明,就不能改变值
JS的数据类型
js有动态类型:
var x // 这里的x是undefined var x = 1 // 这里X是数字 var x = "alex" //这里x是字符串
1. 数值类型----Number
js不区分整型和浮点型,只有一种数字类型
// 下面都是数字类型 var a = 12.34; var b = 20; var c = 123e5; // 12300000 var d = 123e-5; // 0.00123
ps:NaN表示不是一个数字(Not a Number)
//NaN表示不是一个数字,但是NaN的类型是Number类型 parseInt("123") // 返回123 parseInt("ABC") // 返回NaN,NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。 parseFloat("123.456") // 返回123.456
2。字符串类型String
字符串类型可以进行拼接,和python中一样,使用“+”,在es6中,引入了模板字符串,是增强版的字符串,和python中字符串的格式化一样,用反引号标识`内容`:
// 普通字符串 `这是普通字符串!` // 多行文本 `这是多行的 文本` // 字符串中嵌入变量 var name = "abc", time = "today"; `Hello ${name}, how are you ${time}?`
注意:如果模板字符串中需要使用反引号,则在前面要用反斜杠转义
3.布尔值(Boolean)
区别于python,true和false都是小写,""(空字符串)、0、null、undefined、NaN都是false。
4.null和undefined
null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;
undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。
null表示变量的值是空,undefined则表示只声明了变量,但还没有赋值。
5.对象(Object)
在js中,所有事物都是对象,另外js允许自定义对象,js提供多个内建对象,比如String,Date,Array,对象是电邮属性和方法的特殊数据类型
6.数组
和列表类似,用单独的变量名来存储一系列的值。
函数函数函数+++++++++++++++
在js中函数的定义用function用function,举例:
function func(){ console.log("hi"); //要有分号; } function func2(a,b){ // 参数 console.log(a,b) } //函数的调用就是函数名+()
匿名函数:
var sum= function(a,b){ return a+b; } // 匿名函数是var一个变量名 + function(){}
立即执行函数:
(function(a,b){ return a+b; })(1,2); //函数体内用括号写入,然后直接调用,就是立即执行函数
箭头函数:
=>
es6中允许使用箭头函数,用箭头来定义函数
var f = v => v; // 等同于 var f = function(v){ return v; } // 如果箭头函数不需要参数或需要多个参数,就是用圆括号代表参数部分: var f = () => 5; // 等同于 var f = function(){return 5}; var sum = (num1, num2) => num1 + num2; // 等同于 var sum = function(num1, num2){ return num1 + num2; }
函数中的arguments
其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。arguments.length为函数实参个数,arguments.callee引用函数自身。arguments对象和Function是分不开的。因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。
局部变量:
在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。
全局变量:
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
变量生存周期:
JavaScript变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。
作用域
首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。
闭包
闭包就是一个函数引用另外一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会徒增内存消耗!另外使用闭包也要注意变量的值是否符合你的要求,因为他就像一个静态私有变量一样