day01_js笔记

本文详细介绍了JavaScript的发展历史、组成、核心语法、数据类型、变量、运算符、类型转换以及函数等内容。JavaScript是一种基于对象和事件驱动的解释型语言,常用于网页互动、数据验证和提升用户体验。文中还讲解了变量提升、数据类型的typeof检测、对象、数组、函数的作用域和闭包等关键概念,是理解JavaScript基础的全面指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript

一、简介

​ JavaScript 是一种具有面向对象能力的、解释型的程序设计语言。更具体一点,它是基于对象和事件驱动并具有相对安全性的客户端脚本语言。它的主要目的是,验证发往服务器端的数据、增加 Web 互动、加强用户体验度等.

  1. JavaScript 发展史

    1992年,一家称作 Nombas 的公司开始开发一种叫做 C– –(C-minus-minus,简称Cmm)的嵌入式脚本语言。保持与 C(和 C++)的相似性,最终改名为scriptEase.,而这种嵌入式脚本的理念也成为因特网的一块重要的基石.1995 年,Netscape(网景)公司的布兰登与 Sun 公司联手开发一个称为 LiveScript 的脚本语言。为了营销便利,之后更名为 JavaScript(目的是在 Java 这课大树下好乘凉)

    微软创建了一个javascript克隆版.叫做 jscript。在微软进入后,有 3 种不同的 javascript 版本同时存在: javascript 、 jscript 以及 scriptease。1997 年来 程序员组成的 tc39 锤炼出了ECMA-262,该标准定义了叫做 ECMAscript 的全新脚本语言。JavaScript 组成.

  2. JavaScrit 组成

    ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被
    标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的

    ![![img](file:///C:\Users\Administrator\Documents\Tencent Files\1375422793\Image\C2C\L4@_D1MK595(4WI1Y72701.png)

    ECMAScript(基础语法)
    JavaScript 的核心语法 ECMAScript 描述了该语言的语法和基本对象
    DOM(文档对象模型)
    文档对象模型(DOM)—— 描述了处理网页内容的方法和接口
    BOM(浏览器对象模型)
    浏览器对象模型(BOM)—— 描述了与浏览器进行交互的方法和接口

  3. 开发工具

    1、浏览器: chrome
    2、开发工具:hbuilde

    3、进入“控制台”console:F12

    ​ 控制台的作用:
    console 对象代表浏览器的 JavaScript 控制台,用来运行 JavaScript 命令,常常用来显示网
    页运行时候的错误信息。Elements 用来调试网页的 html 和 css 代码。

二、JavaScript 基本用法

​ JS 需要和 HTML 一起使用才有效果,我们可以通过直接或间接的方式将 JS 代码嵌入在
HTML 页面中。

​ 我们可以将 JavaScript 代码放在 html 文件中任何位置,但是我们一般放在网页的 head 或
者 body 部分。由于页面的加载方式是从上往下依次加载的,而这个对我们放置的 js 代码运行
是有影响的。

​ 放在部分,最常用的方式是在页面中 head 部分放置

​ 行内 JS : 写在标签内部的 js 代码

<button onclick="alert('you clicked hered!!!')">click here</button>

​ 内部 JS : 定义在 script 标签内部的 js 代码

<script type="text/javascript" charset="utf-8">
	alert('this is inner js code')
</script>

​ 外部 JS : 单独的 js 文件,在 HTML 中通过 script 标签引入

​ hello.js

alert('this is a outter js document')

​ hello.html

<script src="js/hello.js" type="text/javascript" charset="utf-8"></script>

JS 基础语法

一、语句和注释

​ JavaScript 程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就
是一个语句。

​ 语句(statement)是为了完成某种任务而进行的操作,语句以分号结尾,一个分号即表示
一个语句结束。多个语句可以写在一行内(不建议这么写代码),但是一行写多条语句时,语
句必须以分号结尾。

​ 表达式不需要分号结尾。一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为
语句,这样会产生一些没有任何意义的语句。

单行注释:用//起头;
多行注释:放在/* 和 */之间。
兼容 html 注释方式:<!-- -->

​ 说明:由于历史上 JavaScript 兼容 HTML 代码的注释,所以也使用 HTML中的注释作为
JavaScript 中的单行注释。

二、标识符、关键字

​ 标识符就是一个名字,用来给变量和函数进行命名,有特定规则和规范

由 Unicode 字母、_、$、数字组成、中文组成
(1)不能以数字开头
(2)不能是关键字和保留字
(3)严格区分大小写

​ 关键字也称保留字,是被 JavaScript 征用来有特殊含义的单词

arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield、Infinity、NaN、undefined

三、变量

​ 变量即一个带名字的用来存储数据的内存空间,数据可以存储到变量中,也可以从变量中
取出数据。

  1. 变量的声明

​ 变量声明和赋值:

// 先声明再赋值
var a ; 
a = 10;
// 声明同时赋值
var b = 20;
  1. 变量的注意点

    1)若只声明而没有赋值,则该变量的值为 undefined。

    var box ;
    

    2)变量要有定义才能使用,若变量未声明就使用,JavaScript 会报错,告诉你变量未定义

    max = 100;
    

    3)可以在同一条 var 命令中声明多个变量。

    var a, b, c = 10;
    

    4)若使用 var 重新声明一个已经存在的变量,是无效的。

    var box = 10
     var box
    

    5)若使用 var 重新声明一个已经存在的变量且赋值,则会覆盖掉前面的值

    var box = 10
    var box = 25
    

    6)JavaScript 是一种动态类型、弱类型语言,也就是说,变量的类型没有限制,可以赋予
    各种类型的值.

    var box = ‘hello world’
    box = 122
    
  2. 变量提升

    JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运
    行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提
    升。

    注意:变量提升只对 var 命令声明的变量有效,如果一个变量不是用 var 命令声明的,就
    不会发生变量提升。

四、数据类型

​ 虽说 JS 是弱类型语言,变量没有类型,但数据本身是有类型的。针对不同的类型,我们可
以进行不同的操作

​ JavaScript 中有 6 种数据类型,其中有五种简单的数据类型:UndefinedNull布尔
数值字符串。一种复杂数据类型 Object

数 值(Number): 整数和小数(比如 1 和 3.14)
字符串(String): 字符组成的文本(比如"Hello World")
布尔值(Boolean):true(真)和 false(假)两个特定值
Undefined: 表示“未定义”或不存在,即此处目前没有任何值
Null: 表示空缺,即此处应该有一个值,但目前为空
对象(object)(引用) : 各种值组成的集合
	1)、对象(object){name:”zhangsan”,age:”18”}
	2)、数组(array)[1,2,3]
    3)、函数(function)function test() {}
  1. typeof 操作符

    typeof 操作符是用来检测数据类型。对于值或变量使用 typeof 操作符会返回如下字符串:

    ![](C:\Users\Administrator\Desktop\RX_3((LT1Q`Q]]2(5YDY1.png)

    说明:1、typeof null 返回的是 object 字符串
    2、函数不是数据类型,但是也可以使用 typeof 操作符返回字符串。
    typeof 操作符可以操作变量也可以操作字面量。

    注意:函数在 JavaScript 中是对象,不是数据类型,所以使用 typeof 区分 function 和
    object 是有必要的

    //object
    //空的对象,表示对象已经创建了,但是还没有东西
    //空对象,表示对象还没有创建,就是 null
    var a = {};
    //a 的类型是 Object,值是[object Object],类型返回的字符串是 object
    alert(typeof a);
    var a = null;
    //a 的类型是 Null,值是 null,类型返回的字符串是 obj
    alert(typeof a);
    var a = new Object();
    //a 的类型是 Object,值是[object Object],类型返回的字符串是 object
    alert(typeof a);
    function a () {}
    //a 的类型是 Function 函数,值是函数的代码 function a(){},类型返回的字符串是 function
    alert(typeof a);
    
    1. undefined

      undefined 类型的值是 undefined。
      undefined 是一个表示"无"的原始值,表示值不存在。
      出现 undefined 的常见情况:

      1)当声明了一个变量而没有初始化时,这个变量的值就是 undefine

      var box;
      alert(box);//undefined
      

      2)调用函数时,该函数有形参,但未提供实参,则该参数为 undefined。

      function noData(a) { //js 函数形参只需要变量名即可
      console.log(a);//undefined
      }
      noData();
      

      3)函数没有返回值时,默认返回 undefined。

      var re = noData();//参考上面的 noData 函数
      console.log(re);
      
    2. null

      null 类型是只有一个值的数据类型,即特殊的值 null。它表示空值,即该处的值现在为空,
      它表示一个空对象引用。

      使用 Null 类型值时注意以下几点:
      1)使用 typeof 操作符测试 null 返回 object 字符串。
      2)undefined 派生自 null,所以等值比较返回值是 true。所以,未初始化的变量和赋值为
      null 的变量相等

      alert(undefined == null);
      var box = null;//赋值为 null 的变量
      var a;//未初始化的变量
      alert(a == box);//两个的值相等
      
    3. 布尔类型

      布尔类型有两个值:true、false。常用来做判断和循环的条件

    4. 数值型

      数值型包含两种数值:整型和浮点型。
      1)所有数字(整型和浮点型)都是以 64 位浮点数形式储存。所以,JS 中 1 与 1.0 相等,
      而且 1 加上 1.0 得到的还是一个整数。浮点数最高精度是 17 位小数,由于浮点数运算时可能
      不精确,尽量不要使用浮点数做判断。
      2)在存储数值型数据时自动将可以转换为整型的浮点数值转为整型。
      3)对于过大或过小的数值,可以使用科学计数法来表示

      ​ 4)Infinity、-Infinity
      超过了表数范围,出现 Infinity(正无穷)或者-Infinity(负无穷)

      ​ isFinite()函数可以确定是否超出范围:
      true:没有超出;false:超出了。

      console.log(isFinite(100e1000));//false:超出
      console.log(isFinite(-100e1000));//false:超出
      console.log(isFinite(12));//true:未超出
      

      ​ 5)NaN

      ​ 表示非数值(Not a Number),是一个特殊的值。
      如:将字符串解析成数字出错的场合.

      console.log(parseInt("abc"));//parseInt 方法将字符串解析为数值,但若无法解
      析,返回 NaN
      

      ​ 注意:
      NaN 不等于任何值,包括它本身,因为它不是一个值
      NaN 与任何数(包括它自己)的运算,得到的都是 NaN。

      ​ isNaN()可以用来判断一个值是否为 NaN
      true:不是数字;false:是数字

      console.log(isNaN(12));//false
      console.log(isNaN(("abc" + 1)));//true
      
    5. 字符串

      使用 ’ ’ 或 " "引起来,如:‘sxt’,“good”。
      使用加号’+’进行字符串的拼接,如:console.log(‘hello’ + ’ everybody’);

      1)转义符:记住常用即可

      \0 代表没有内容的字符(\u0000)
      \n 换行符(\u000A)
      \t 制表符(\u0009)
      \' 单引号(\u0027)
      \" 双引号(\u0022)
      
    6. 对象

      对象是一组数据和功能的集合。

      typeof window // “object”
      typeof {} // “object”
      typeof [] // “object”
      typeof null // “object”

      说明:
      {}:表示使用对象字面量方式定义的对象。空的大括号表示定义包含默认属性和方法的对象。

      instanceof 运算符
      typeof 操作符对数组(array)和对象(object)的显示结果都是 object,那么可以利用
      instanceof 运算符,它可用于判断一个变量是否某个对象的实例。

      var o = {};
      var a = [];
      o instanceof Object// true,Object 是对象构造
      a instanceof Array // true,Array 是数组对象
      
    7. 函数

      function f() {}
      typeof f //function
      

五、运算符

  1. 算数运算符

  2. 赋值和扩展运算符

    ![](C:\Users\Administrator\Desktop~US}3`X}CEE(~@ZDO8FRCMI.png)

  3. 比较运算符

    ![](C:\Users\Administrator\Desktop\NJ7KCS2]IVC[ISU6[(8_Z20.png)

六、类型转换

​ 很多时候,我们在进行数据运算或输出等操作时需要将数据在不同类型之间进行转换,在
JS 数据类型转方法主要有三种:利用 js 变量弱类型自动转换、转换函数、强制类型转换.

  1. 自动类型转换

    XY[P0PI)9KTV)B6J2.jpg)

  2. 函数转换(String to Number

    JS 提供了 parseInt()和 parseFloat()两个全局转换函数。前者把值转换成整数,后者把
    值转换成浮点数。只有对 String 类型调用这些方法,这两个函数才能正确运行;对其他类型返
    回的都是 NaN(Not a Number)

    1)、parseInt()在转换之前,首先会分析该字符串,判断位置为 0 处的字符,判断它是否
    是个有效数字,如果不是,则直接返回 NaN,不再继续,如果是则继续,直到找到非字符

    parseInt("1234blue"); //returns 1234
     parseInt("0xA"); //returns 10
     parseInt("22.5"); //returns 22
     parseInt("blue"); //returns NaN
    

    注意: parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转
    换成整数。基是由 parseInt()方法的第二个参数指定的

    parseInt("AF", 16); //returns
    175parseInt("10", 2); //returns
    2parseInt("10", 8); //returns
    8parseInt("10", 10); //returns 10
    

    如果十进制数包含前导 0,那么最好采用基数 10,这样才不会意外地得到八进制的值

    parseInt("010"); //returns 8
    parseInt("010", 8); //returns 8
    parseInt("010", 10); //returns 10
    

    2)、parseFloat()方法与 parseInt()方法的处理方式相似,从位置 0 开始查看每个字符,
    直到找到第一个非有效的字符为止,然后把该字 符之前的字符串转换成数字。不过,对于这个
    方法来说,第一个出现的小数点是有效字符。如果有两个小数点,第二个小数点将被看作无效
    的,parseFloat()方法会把这个小数点之前的字符串转换成数字。

    parseFloat("1234blue"); //returns 1234.0
    parseFloat("0xA"); //returns 0
    parseFloat("22.5"); //returns 22.5
    parseFloat("22.34.5"); //returns 22.34
    parseFloat("0908"); //returns 908
    parseFloat("blue"); //returns NaN
    
  3. 显示转换

    几乎每个数对象都提供了 toString()函数将内容转换为字符串形式,其中 Number 提供的
    toString()函数可以将数字以指定的进制转换为字符串,默认为十进制。

    Number 还提供了 toFixed()函数将根据小数点后指定位数将数字转为字符串,四舍五入

var data = 10
console.log(data.toString())
console.log(data.toString(2))
data = 1.4;
console.log(data.toFixed(0));
data = 1.49;
console.log(data.toFixed(1));
data = true
console.log(data.toString())
// 不能对null和undefined使用
data = null
console.log(data.toString())
data = undefined
console.log(data.toString())

​ JS 为 Number、Boolean、String 对象提供了构造方法,用于强制转换其他类型的数据。此
时操作的是整个数据,而不是部分

Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number( "5.5 ") 5.5
Number( "56 ") 56
Number( "5.6.7 ") NaN
Number(new Object())NaN
Number(100) 100

七、块

​ JavaScript 使用大括号,将多个相关的语句组合在一起,称为“区块”。
与大多数编程语言不一样,JavaScript 的区块不构成单独的作用域。也就是说,区块中的
变量与区块外的变量,属于同一个作用域。

九、数组

​ 数组(array)是按次序排列的一组数据,每个值的位置都有编号(从 0 开始),整个数组
用方括号表示。Js 中定义数组的三种方式如下(也可先声明再赋值):

var arr=[值 1,值 2,值 3]; //隐式创建
var arr=new Array(值 1,值 2,值 3); //直接实例化
var array=new Array(size); //创建数组并指定长度
  1. 基本操作

    数组的长度可以通过 length 属性来获取,并可以任意更改

    数组名.length
    数组名.length = 新长度
    

    数组中的每一个元素都可以被访问和修改,甚至是不存在的元素,无所谓越界

    数组名[下标]
    数组名[下标] = 新值
    
  2. 数组的遍历

    普通 for 循环遍历

    for(var i=0; i<=数组.length-1; i++){
    }
    如:
    for(var idx=0;idx<arr.length;idx++){
     console.log(arr[idx]);
    }
    

    for…in

    for(var 下标(名称任意) in 数组名){ 
    数组名[下标]是获取元素
    } //下标(名称任意)
    如:
    for(var idx in arr){
     console.log(arr[idx]);
    }
    

    forEach

    数组名.forEach(function(element,index){
    }) // element(名称任意):元素,index(名称任意):下标
    如:
    arr.forEach(function(elem,idx){
     console.log(idx+"-->"+elem);
    });
    

    注意:

    数组在使用的时候建议大家规矩来用。在存放数据时,从下标 0 开始顺序的存放数组元素。
    如果下标:
    1.为非负整数(包括整数字符串):自动从 0 开始,不存在添加 undefined
    2.为负数、小数、非数字符串:这些内容不计算在长度内,当成"属性"处理,相当于自定义属性。

十、函数

​ 函数,即方法。就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,
返回不同的值。函数也是对象。

  1. 函数的定义方式

    函数声明语句:

    function 函数名([参数列表]){}
    例如:
    function foo(){ 
     console.log(1);
    } 
    foo();:该种方式定义的函数具有声明提升的效果
    

​ 2.函数定义表达式-----以表达式方式定义的函数,函数的名称是可以不需要的

var 变量名 = function ([参数列表]) {}
变量名()
这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式,因为赋值语
句的等号右侧只能放表达式

​ 3.Function 构造函数

​ Function 构造函数接收任意数量的参数,但最后一个参数始终都被看成是函数体,而前面
的参数则列举出了新函数的参数

var add = new Function('x','y','return (x + y)');
// 等同于
function add(x, y) {return (x + y);}
add()

​ 注意:
1、js 中的函数没有重载,同名的函数,会被后面的函数覆盖。
2、js 中允许有不定数目的参数,后面介绍 arguments 对象

  1. 函数名的提升(了解)

    JavaScript 引擎将函数名视同变量名,所以采用 function 命令声明函数时,整个函数会像
    变量声明一样,被提升到代码头部。所以,下面的代码不会报错。

    f();//先调用
    function f() {}//后声明
    

    表面上,上面代码好像在声明之前就调用了函数 f。但是实际上,由于“变量提升”,函数名
    f 被提升到了代码头部,也就是在调用之前已经声明了。但是,如果采用赋值语句定义函数,
    JavaScript 就会报错。

    f();
    var f = function (){};// TypeError: undefined is not a function3.函数的参数、调用和 return 语句
    
  2. 函数的参数、调用和 return 语句

    参数-----函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部
    数据就叫参数,定义时的参数称为形参,调用时的参数称为实参

     实参可以省略,那么对应形参为 undefined

    //调用函数时,实参可以省略,则对应形参为 undefined
    function add(a , b) {
    console.log(a + "+" + b + "=" + (a + b));
    }
    add(3,4,5)//3+4=7
    add(1);//1+undefined=NaN
    add();//undefined+undefined=NaN
    

     若函数形参同名(一般不会这么干):在使用时以最后一个值为准。

    add2(1,2);//若函数形参同名(一般不会这么干):在使用时以最后一个值为准
    function add2(a , a) {
    console.log(a);
    }
    add2(1,2);
    

     可以给参数默认值:当参数为特殊值时,可以赋予默认值。

    //给参数默认值
    function defaultValue(a){
    a = a || "a";
    return a;
    }
    console.log(defaultValue());
    function f(a){
    //若参数 a 不为 undefined 或 null,则取本身的值,否则给一个默认值
    (a !== undefined && a !== null) ? a = a : a = 1;
    return a;
    }
    console.log(f());
    

     参数为值传递,传递副本 ;引用传递时传递地址,操作的是同一个对象。

    //值传递
    var num = 12;
    function change(n) {
    n = 30;
    }
    change(num);
    console.log(num);
    //引用传递
    var obj = {name: "tom"};
    function paramter(o) {
    o.name = 2;
    }
    paramter(obj);
    console.log(obj.name);
    //给形参 o 赋予了新的数组
    var obj2 = [1, 2, 3];
    function paramter2(o){
    o = [2, 3, 4];
    o[1] = 3;
    }
    paramter2 (obj2);
    console.log(obj2)
    
  3. 函数的调用

    常用调用方式:函数名([实参]);
    存在返回值可以变量接收,若接收无返回值函数则为 undefined。

    函数调用模式:

    function add(a,b){
     return a+b;
    } 
    var sum = add(1,2) 
    console.log(sum)
    

    方法调用模式:

    var o = {
     m: function(){
     console.log(1); 
     } 
    };
    o.m();
    

    javascript 中函数也是对象,函数对象也可以包含方法。call()和 apply()方法可以用来间
    接地调用函数。任何函数可以作为任何对象的方法来调用,哪怕这个函数不是那个对象的方
    法。两个方法都可以指定调用的实参。call()方法使用它自有的实参列表作为函数的实参,
    apply()方法则要求以数组的形式传入参数

    注:谁调用函数,this就指向谁

    间接调用模式:

    var obj2 = {};
    function fn10(x,y) {
    	console.log(x+y);
    	console.log(this); 
    }
    	fn10(1,2); //  Window对象
    		
    	fn10.call(); //  Window对象
    	fn10.call(obj2); // obj2
    	fn10.call(obj2,10,20); // obj2
    		
    	fn10.apply(obj2,[100,200]); // obj2
    
  4. 匿名函数立即调用

    (1)匿名函数:function ([参数]){}

    (2)调用:(function ([形参]) {})([实参]);

    (function(a,b) {
    			console.log(a-b);
    		})(10,2);
    

    在函数只被使用一次的情况下可以使用这种方式,简便省事

  5. return 语句
    函数的执行可能会有返回值,需要使用 return 语句将结果返回。return 语句不是必需的,
    如果没有的话,该函数就不返回任何值,或者说返回 undefined。
    作用:在没有返回值的方法中,用来结束方法。
    有返回值的方法中,一个是用来结束方法,一个是将值带给调用者。

  6. arguments 对象和函数的方法及属性

    arguments对象可以得到函数的实参数量

    函数名.name 得到函数名称

    函数名.length 得到函数的形参数量

    函数名.toString() 得到函数的源码

    function fn1 (a,b,c) {
    			// arguments对象可以得到函数的实参数量
    			console.log(arguments.length);
    			console.log("函数....");
    			console.log(arguments);
    		}		
    		fn1(1,2);
    		
    		console.log(fn1.name);
    		console.log(fn1.length);
    		console.log(fn1.toString());
    

    8.函数的作用域

​ 函数作用域:全局(global variable)和局部(local variable)

​ 1)全局变量与局部变量同名问题

	var num=1;
function fn() {
			var num = 10; // 这是个局部变量,与全局变量毫无关系
			console.log(num); // 就近原则
			var b = 2; // 局部变量
			c = 3; // 不用var修饰符声明的变量时全局变量
		}		
		fn();
		console.log(num);
		//console.log(b);
		console.log(c);

​ 2)在函数中定义变量时,若没有加 var 关键字,使用之后自动变为全局变量

function foo(x) {
			 if (x > 100) {
			 	var tmp = x - 100;
			 }
			 console.log(tmp);
		}
		foo(1);

​ 3)变量作用域提升

十一、 闭包

​ 闭包的形成:
1、外部函数内部嵌套内部函数
2、内部函数中使用外部函数的环境
3、外部函数返回内部函数

// 1、外部函数内部嵌套内部函数 
		function fn1() {
			var a = "Hello!";
			function fn2() {
				// 2、内部函数中使用外部函数的环境
				console.log(a);
			}
			// 3、外部函数返回内部函数
			return fn2;
		}		
		var f = fn1();
		console.log(f);
		f();

​ 闭包的作用:
1、获取函数内部的变量
2、保存变量的值在内存中
3、避免变量名重复

console.log("===========浇水实例=========");
// 定义外部函数,设置形参(水壶的容量)
		function waterFlower(total) {
			// 定义内部函数,执行浇水过程 (每次浇水,水容量减50ml)
			function water(flower) {
				// 当水容量大于50ml则浇水
				if (total >= 50) {
					// 每次浇水减50
					total = total - 50;
					
				} else {
					// 如果没水,则自动加水
					document.write("<h4>正在重新装水....</h4>");
					total = 200;
					// 浇水
					total = total - 50;
					// 
				}
				document.write("给"+flower+"浇水50ml,剩余" + total + "ml的水!<br>");
			}
			
			// 返回内部函数
			return water;
		}
		
		// 装水
		var t = waterFlower(200);
		// 浇水
		t("桃花"); 
		t("兰花");
		t("玫瑰花");
		t("菊花");
		t("桂花");

十二、内置对象

​ Date: 日期对象,用来创建和获取日期

//获取getFullYear(), getMonth(), getDate(),getHours(),getMinutes(),getSeconds()//设置setYear(), setMonth(), …
◦ toLoacaleString()
var mydate = new Date();
		console.log(mydate);
		
		// toLocaleString():可根据本地时间把 Date 对象转换为字符串,并返回结果。
		console.log(mydate.toDateString());
		console.log(mydate.toLocaleString());

​ 说明:
1.getMonth():得到的值:0~11(1 月~12 月)
2.setMonth():设置值时 0~11
3.toLocaleString():可根据本地时间把 Date 对象转换为字符串,并返回结果。

​ Math:数学对象

◦ Math.random()
◦ Math.ceil() :天花板 大于最大整数
◦ Math.floor() :地板 小于最小整数 String

十三、js对象

​ JS中一切数据皆对象

​ 1、定义对象

​ JS 创建自定义对象,主要通过三种方式:

​ 1、字面量形式创建对象
var 变量名 = {}; // 空对象
var 变量名 = {键:值,…};
2、通过 new Object 对象创建
var 变量名 = new Object();
3、通过 Object 对象的 create 方法创建对象
var 变量名 = Object.create(null或对象);

​ 2、对象的序列化和反序列化
序列化即将 JS 对象序列化为字符串,反序列化即将字符串反序列化为 JS 对象。JS 中通过
调用 JSON 方法,可以将对象序列化成字符串,也可以将字符串反序列化成对象 。
序列化对象,将对象转为字符串
JSON.stringify(object)
反序列化,将一个 Json 字符串转换为对象。
JSON.parse(jsonStr)

var str = '{"uname":"zhangsan", "uage":18 }';
// 反序列化:将字符串转换成对象
		var object1 = JSON.parse(str);
		console.log(object1);
		console.log(object1.uname);
		
		// 序列化,将对象转换成字符串
		var json1 = JSON.stringify(object1)
		console.log(json1);
		console.log(json1.uname);

​ 3、eval()

​ 1、可借助 eval()动态函数,将参数字符串解析成 js 代码来执行,只接受原始字符串作为参数
eval(“console.log(‘你好’)”);//控制台输出你好

​ 2、可将 json 串转为 json 对象

​ 1)第一种解析方式:得到的 json 对象名就是 jsonObj
eval(“var jsonObj = " + jsonStr);
2)第二种解析方式:对象中有多个属性
var jsonObj = eval(”(" + jsonStr + “)”);
由于 json 是以{ }的方式来开始以及结束的,在 eval 中会被当成一个语句块来处 理,故必 须强制将它转换成一种表达式。加上圆括号是使 eval 函数在处理时强制将括号内的表达式转化 为对象而不作为语句来执行。
3)第二种解析方式:对象中只有一个属性
eval(jsonStr);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值