1,数据类型

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

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

var a
document.write(typeof a+"____")
var a=12
document.write(typeof a+"____")
a="xiaoshi"
document.write(typeof a+"____")
a=true;
document.write(typeof a+"____")
a=undefined;
document.write(typeof a+"____")
a="";
document.write(typeof a+"____")
a=null;
document.write(typeof a+"____")

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

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

function Fun(){}
var f=new Fun();
var f2=new Fun();
document.write(f instanceof Fun)
document.write(f2 instanceof Fun)
document.write(f instanceof Function)
document.write(f instanceof Object)

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

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

 var a=null;
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.如何访问对象内部数据?
 方式一:对象.属性名: 编码简单, 有时不能用
方式二: 对象['属性名']: 编码麻烦, 能通用

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

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

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

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

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

var p={}
var propName = 'myAge'
var value = 18
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元素

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

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

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

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

6.3.IIFE(立即执行函数)

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

a,IIFE的作用

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

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

(function () {
var a = 1
function test () {
console.log(++a)
}
window.$ = function () { // 向外暴露一个全局函数
return {
test: test
}
}
})() $().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. C# Datagridview combox列 初始化颜色

    DataGridView 初始化完成后,在combox里显示颜色,如这样: DataGridView 注册 cellPainting事件: private void m_dataGridView_Ce ...

  2. Java21新特性-虚拟线程

    虚拟线程是轻量级线程(类似于 Go 中的 "协程(Goroutine)"),可以减少编写.维护和调度高吞吐量并发应用程序的工作量. 线程是可供调度的最小处理单元,它与其他类似的处理 ...

  3. NumPy 二项分布生成与 Seaborn 可视化技巧

    二项分布 简介 二项分布是一种离散概率分布,用于描述在固定次数的独立试验中,事件"成功"的次数的概率分布.它通常用于分析诸如抛硬币.做选择题等具有两个结果(成功或失败)的事件. 参 ...

  4. C# wpf之控制屏幕显示方向旋转

    using System;using System.Collections.Generic;using System.Linq;using System.Runtime.InteropServices ...

  5. 莫烦tensorflow学习记录 (2)激励函数Activation Function

    https://mofanpy.com/tutorials/machine-learning/tensorflow/intro-activation-function/ 这里的 AF 就是指的激励函数 ...

  6. Excel相关技巧

    (1)如何实现EXCEL某个单元格满足条件整行变色? 链接:https://jingyan.baidu.com/article/75ab0bcba47c19d6864db2cf.html (2)获取表 ...

  7. kettle从入门到精通 第十八课 kettle Metadata Injection

    1.Metadata Injection 类似于java里面的模版,设置通用的模版,通过输入不同的数据,得到不同的结果.本示例演示两个字段拼接成一个新字段. 2.设置模版,设置模版时,只需要根据自己的 ...

  8. MapStruct - 注解汇总

    @Mapper @Mapper 将接口或抽象类标记为映射器,并自动生成映射实现类代码. public @interface Mapper { // 引入其他其他映射器 Class<?>[] ...

  9. monaco-editor 的 Language Services

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:修能 这是一段平平无奇的 SQL 语法 SELECT id ...

  10. raksmart服务器部署SSL报错:ERR_CERT_COMMON_NAME_INVALID

    背景:raksmart服务器 下篇 部署项目 SSL报错:ERR_CERT_COMMON_NAME_INVALID 安装certbot sudo apt update sudo apt install ...