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# winform GDI+ 五子棋 (一):基本界面和胜负判断

    棋盘和棋子采用GDI+画上去的.棋盘18*18.棋子是用DrawElipse画的,白棋和黑棋分两个List集合存储,方便判断五子连线的情况. 主要说一下,五子连线的思路,把集合按行和按列以及按正斜和反 ...

  2. MyBatis抛出BindingException异常可能是你忘了配置资源拷贝

    最近博主在搭建Mybatis项目时遇到了一问题,在一切配置妥当后,开始运行测试代码,但是此时控制台无情的抛出了异常: 开始寻找问题根源 咦?难道是我哪里写错,我的第一反应是我的xml配置文件哪里写错了 ...

  3. golang 后台 苹果一键登录 sing in with apple

    本文主要展示golang后台编写苹果一键登录的代码.苹果一键登录的流程需自行去查看相关文档 这是解析 identity_token的方法来验证    如果是用code的话验证 请去 https://b ...

  4. 【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)

    在使用App Service服务部署业务应用,因为有些第三方的接口需要调用者携带TLS/SSL证书(X509 Certificate),在官方文档中介绍了两种方式在代码中使用证书: 1) 直接使用证书 ...

  5. 008. gitlab代码克隆与推送

    推送配置 gitlab需要推送的客户端sshkey添加到gitlab服务器中 node1 推送配置 centos node1: [root@node1 ~]# cat ~/.ssh/id_rsa.pu ...

  6. RHCSA题目大纲

    1.配置IP地址2.配置软件仓库3.调试SELinux4.创建用户账户5. 配置cron计划任务6.创建共享目录7.配置NTP时间客户端  "chronyd服务"8. auto自动 ...

  7. JDBC的简单使用以及介绍

    JDBC(Java DataBase Connectivity) Java 语言连接数据库 再本模块中,java提供里一组用于连接数据库的类和接口 Java 语言开发者,本身没有提供如何具体连接数据库 ...

  8. Vue Router 4与路由管理实战

    title: Vue Router 4与路由管理实战 date: 2024/6/7 updated: 2024/6/7 excerpt: 这篇文章介绍了如何在Vue.js应用中利用Vue Router ...

  9. 你知道键盘是如何工作的吗?(xv6键盘驱动程序)

    键盘驱动程序 公众号:Rand_cs 键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的.关于驱动程序前文磁 ...

  10. Vue3:介绍

    Vue 3 相较于 Vue 2 在多个方面进行了改进和优化,主要优势包括但不限于以下几个方面: 响应式系统优化: Vue 3 引入了基于 Proxy 的响应式系统,取代了 Vue 2 中基于 Obje ...