1,数据类型

JavaScript将数据分为六大类型,分别为数值类型(number)、字符串类型(string)、布尔类型(boolean)、undefined(定义未赋值)、null(赋值为空值)、应用类型。其中引用类型可分为普通对象,Function、Array。Function,Array都是属于特殊的对象。

typeof可以用来判断一个变量的数据类型:

  1. var a
  2. document.write(typeof a+"____")
  3. var a=12
  4. document.write(typeof a+"____")
  5. a="xiaoshi"
  6. document.write(typeof a+"____")
  7. a=true;
  8. document.write(typeof a+"____")
  9. a=undefined;
  10. document.write(typeof a+"____")
  11. a="";
  12. document.write(typeof a+"____")
  13. a=null;
  14. document.write(typeof a+"____")

以上代码的打印结果为:undefined、number、string、boolean、undefined、object、object。值得注意的是虽然值为null或者为空,但是打印的结果还是一个Object类型。也就是说typeof不可以用于判断null和Object

instanceof用来判断对象的具体类型:

  1. function Fun(){}
  2. var f=new Fun();
  3. var f2=new Fun();
  4. document.write(f instanceof Fun)
  5. document.write(f2 instanceof Fun)
  6. document.write(f instanceof Function)
  7. document.write(f instanceof Object)

以上代码的执行结果为:true、true、false、true。

===用于判断undefined,和null:

  1. var a=null;
  2. document.write(a===null)

以上代码的执行结果为true。

2,undefined与null

undefined与null的区别在于:undefined表示的是定义未赋值,null表示定义赋值为一个null。

null的作用:初始赋值, 表明将要赋值为对象;结束前, 让对象成为垃圾对象(被垃圾回收器回收)。

3,严格区别变量类型与数据类型
数据的类型:基本类型和对象类型。
变量的类型(变量内存值的类型):基本类型(保存就是基本类型的数据),引用类型(:保存的是地址值)。

4, 数据、内存和变量
存储在内存中代表特定信息的二级制代码.,其特点为可传递, 可运算。
内存是内存条通电后产生的可储存数据的空间(临时的)。内存产生和死亡: 内存条(电路版)==>通电==>产生内存空间==>存储数据==>处理数据==>断电==>内存空间和数据都消失。
a,内存分类。
    栈: 全局变量/局部变量
    堆: 对象
变量是可变化的量, 由变量名和变量值组成,每个变量都对应的一块小内存, 变量名用来查找对应的内存, 变量值就是内存中保存的数据。
内存,数据, 变量三者之间的关系为:内存用来存储数据的空间,变量是内存的标识。

5,有关变量的问题

问题一: var a = xxx, a内存中到底保存的是什么?
    * xxx是基本数据, 保存的就是这个数据
    * xxx是对象, 保存的是对象的地址值
    * xxx是一个变量, 保存的xxx的内存内容(可能是基本数据, 也可能是地址值)

问题二:关于引用变量赋值
  * 2个引用变量指向同一个对象, 通过一个变量修改对象内部数据, 另一个变量看到的是修改之后的数据
  * 2个引用变量指向同一个对象, 让其中一个引用变量指向另一个对象, 另一引用变量依然指向前一个对象

问题三:问题: 在js调用函数时传递变量参数时, 是值传递还是引用传递
  * 理解1: 都是值(基本/地址值)传递
  * 理解2: 可能是值传递, 也可能是引用传递(地址值)

问题四:问题: JS引擎如何管理内存?
a,内存生命周期
  * 分配小内存空间, 得到它的使用权
  * 存储数据, 可以反复进行操作
  * 释放小内存空间
b. 释放内存
  * 局部变量: 函数执行完自动释放
  * 对象: 成为垃圾对象==>垃圾回收器回收

5,对象

5.1.什么是对象

对象就是用于保存多个数据的封装体。

5.2.为什么使用对象

统一管理多个数据

5.3.对象的组成
  属性: 属性名(字符串)和属性值(任意)组成
  方法: 一种特别的属性(属性值是函数)

5.4.如何访问对象内部数据?
 方式一:对象.属性名: 编码简单, 有时不能用
方式二: 对象['属性名']: 编码麻烦, 能通用

方式一不能用的情况:属性名包含特殊字符: -或者空格,属性名不确定。

  1. var p = {}
  2. p.content-type = 'text/json'

这种方式不可以使用。只能使用第二种方式。

  1. var p = {}
  2. p['content-type'] = 'text/json'

同时,在属性名不确定时,使用第二种方式,可以方便获取不同属性的属性名,更加灵活多变。

  1. var p={}
  2. var propName = 'myAge'
  3. var value = 18
  4. p[propName] = value

6,函数

6.1.函数概念

a,什么是函数

实现特定功能的多条语句的封装体,只有函数是可以执行的, 其它类型的数据不能执行。

b,为什么要用函数

提高代码复用.

c,如何调用(执行)函数

*test(): 直接调用。
  * obj.test(): 通过对象调用。
  * new test(): new调用。
  * test.call/apply(obj): 临时让test成为obj的方法进行调用。

6.2.回调函数

回调函数是指通过某种方式调用的自定义的函数,这个函数是我们自己定义的,但是不是由我们调用,而是在某种场景之下才被调用的。例如一个函数的形参是一个函数时,也被称之为回调函数。

场景的回调函数场景有:

dom事件回调函数 ==>发生事件的dom元素

  1. document.getElementById('btn').onclick = function () { // dom事件回调函数
  2. alert(this.innerHTML)
  3. }

定时器回调函数 ===>window

  1. setTimeout(function () { // 定时器回调函数
  2. alert('到点了'+this)
  3. }, 2000)

ajax请求回调函数
生命周期回调函数

6.3.IIFE(立即执行函数)

立即执行函数是匿名函数调用本身的函数,

a,IIFE的作用

  • 隐藏实现
  • 不会污染外部(全局)命名空间
  • 用它来编码js模块

b,IIFE可以向外提供一个访问函数

  1. (function () {
  2. var a = 1
  3. function test () {
  4. console.log(++a)
  5. }
  6. window.$ = function () { // 向外暴露一个全局函数
  7. return {
  8. test: test
  9. }
  10. }
  11. })()
  12. $().test()

6.4. this是什么?
任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window,所有函数内部都有一个变量this,它的值是调用函数的当前对象。
a. 如何确定this的值?
  * test(): window
  * p.test(): p
  * new test(): 新创建的对象
  * p.call(obj): obj

b,注意:直接调用,this对象是window。

【JavaScript高级01】JavaScript基础深入的更多相关文章

  1. javaScript系列 [01]-javaScript函数基础

    [01]-javaScript函数基础 1.1 函数的创建和结构 函数的定义:函数是JavaScript的基础模块单元,包含一组语句,用于代码复用.信息隐蔽和组合调用. 函数的创建:在javaScri ...

  2. JavaScript高级程序设计-(2)基础概念

    for-in 语句 for-in 语句是一种迭代语句,用来枚举对象属性,语法:for (property in expression) statement实例:for(var propName in ...

  3. Javascript高级程序设计——javascript简介

    1.Javascript简史 javascript诞生于1995年,是由网景公司的Brendan Eich开发的,最初的目的是在客户端处理一些输入验证操作,自此后成为常见浏览器的特色功能,如今用途已经 ...

  4. Javascript高级程序设计——Javascript简史+使用Javascript

    一.Javascipt简史 1.了解Javascript历史 Netscape(Javascript1.0).Microsoft(JScript)到JS1.1,再到ECMA-262标准 2.知道ECM ...

  5. 【JavaScript从入门到精通】第一课 初探JavaScript魅力-01

    第一课 初探JavaScript魅力-01 JavaScript是什么 如今我们打开一个大型的网站,都会有很多JS效果的功能和应用.对于学过CSS+HTML的同学,即使是像淘宝那样的网站,用一两天时间 ...

  6. javaScript系列 [06]-javaScript和this

    在javaScript系列 [01]-javaScript函数基础这篇文章中我已经简单介绍了JavaScript语言在函数使用中this的指向问题,虽然篇幅不长,但其实最重要的部分已经讲清楚了,这篇文 ...

  7. 读书时间《JavaScript高级程序设计》一:基础篇

    第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...

  8. javascript高级编程笔记01(基本概念)

    1.在html中使用JavaScript 1.  <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...

  9. 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...

  10. 阅读摘录《javascript 高级程序设计》01

    前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...

随机推荐

  1. Android 13 - Media框架(32)- ACodec(八)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 拖了好久都没有更新,前面写的东西都有些忘了,回过头来再看之前写的内容,觉得有很多地方写的不好,或者说现在又有了新的理解,想要重新修改但是需要修改的内 ...

  2. 搭建高可用k8s

    搭建k8s高可用 高可用只针对于api-server,需要用到nginx + keepalived,nginx提供4层负载,keepalived提供vip(虚拟IP) 系统采用openEuler 22 ...

  3. B站login-极验逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 https:// ...

  4. 使用 nsenter 排查容器网络问题

    需求 我想进入容器中执行 curl 命令探测某个地址的连通性,但是容器镜像里默认没有 curl 命令.我这里是一个内网环境不太方便使用 yum 或者 apt 安装,怎么办? 这个需求比较典型,这里教大 ...

  5. 副本集replicaSet

    mongodb高可用架构 https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/ 复制是跨多个服务器同步数据的过程. 复制提供 ...

  6. python 简单剖析及语法基础

    1.Python的应用领域 WEB开发 网络编程 爬虫 云计算 人工智能.数据分析 自动化运维  金融分析  科学运算  游戏开发 2.Python的发展前景 知乎上有一篇文章,问Python未来10 ...

  7. sqlUtil

    package com.cmbchina.monitor.utils;import com.alibaba.druid.sql.ast.SQLStatement;import com.alibaba. ...

  8. 一文详解分布式 ID

    前言 分布式系统中,我们经常需要对数据.消息等进行唯一标识,这个唯一标识就是分布式 ID,那么我们如何设计它呢?本文将详细讲述分布式 ID 及其生成方案. 一.为什么需要分布式 ID 目前大部分的系统 ...

  9. JAVA-poi导出excel到http响应流

    导出结果为excel是相对常见的业务需求,大部分情况下只需要导出简单的格式即可,所以有许多可以采用的方案.有些方案还是很容易实现的. 一.可用的解决方案 目前可以有几类解决方案: 字处理企业提供的解决 ...

  10. .NET 日志系统-3 结构化日志和集中日志服务

    .NET 日志系统-3 结构化日志和集中日志服务 系列文章 认识.NET 日志系统 https://www.cnblogs.com/ZYPLJ/p/17663487.html .NET 认识日志系统- ...