【JavaScript高级01】JavaScript基础深入
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基础深入的更多相关文章
- javaScript系列 [01]-javaScript函数基础
[01]-javaScript函数基础 1.1 函数的创建和结构 函数的定义:函数是JavaScript的基础模块单元,包含一组语句,用于代码复用.信息隐蔽和组合调用. 函数的创建:在javaScri ...
- JavaScript高级程序设计-(2)基础概念
for-in 语句 for-in 语句是一种迭代语句,用来枚举对象属性,语法:for (property in expression) statement实例:for(var propName in ...
- Javascript高级程序设计——javascript简介
1.Javascript简史 javascript诞生于1995年,是由网景公司的Brendan Eich开发的,最初的目的是在客户端处理一些输入验证操作,自此后成为常见浏览器的特色功能,如今用途已经 ...
- Javascript高级程序设计——Javascript简史+使用Javascript
一.Javascipt简史 1.了解Javascript历史 Netscape(Javascript1.0).Microsoft(JScript)到JS1.1,再到ECMA-262标准 2.知道ECM ...
- 【JavaScript从入门到精通】第一课 初探JavaScript魅力-01
第一课 初探JavaScript魅力-01 JavaScript是什么 如今我们打开一个大型的网站,都会有很多JS效果的功能和应用.对于学过CSS+HTML的同学,即使是像淘宝那样的网站,用一两天时间 ...
- javaScript系列 [06]-javaScript和this
在javaScript系列 [01]-javaScript函数基础这篇文章中我已经简单介绍了JavaScript语言在函数使用中this的指向问题,虽然篇幅不长,但其实最重要的部分已经讲清楚了,这篇文 ...
- 读书时间《JavaScript高级程序设计》一:基础篇
第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...
- javascript高级编程笔记01(基本概念)
1.在html中使用JavaScript 1. <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...
- 读书笔记(06) - 语法基础 - JavaScript高级程序设计
写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...
- 阅读摘录《javascript 高级程序设计》01
前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...
随机推荐
- MFC之ListControl选中行删除
if (m_list.GetSelectedCount() > 0) { POSITION pos= m_list.GetFirstSelectedItemPosition(); while ( ...
- 开源一站式敏捷测试管理,极简项目管理平台 itest(爱测试) 6.6.2 发布,便捷迫切功能增强
(一)itest 简介及更新说明 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试5合1,又有丰富的统计分析.可按测试包分配测试用例执行 ...
- js整数类型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- react 网络请求 axios
react中通过npm来安装axios扩展 cnpm i -S axios 发起请求 import React, { Component } from 'react' import axios fro ...
- ARC169
A 我们定义 \(dp_{dep}\) 为第 \(dep\) 层会对上一层产生多少的影响. 如果有一层的影响大于 \(0\),在足够次计算后那么肯定是正号.如果小于零那就一定是负号. 由于越久影响到的 ...
- Spark-submit常用任务命令参数和说明
Spark常用任务命令参数和说明 spark-submit \ --name task2018072711591669 \ --master yarn --deploy-mode client \ - ...
- 增补博客 第一篇 python 简易带参计算器
设计一个简易的参数计算器.[输入格式]第一行输入待计算的带变量参数的计算式第二行输入各变量参数的赋值序列[输出格式]输出带变量参数的计算式的计算结果[输入样例]a+ba=1,b=10[输出样例]11 ...
- 向Web服务器端上传文件
server.py import flaskapp = flask.Flask(__name__)@app.route('/upload', methods=['POST'])def uploadFi ...
- QMS质量管理系统:打造企业质量控制的新纪元
在当今竞争激烈的市场环境下,产品质量是决定企业生存与发展的关键因素之一.为了确保从设计到交付的每一步都符合最高标准,一套高效.全面的质量管理系统(Quality Management System, ...
- 原生js或者是es中让人厌恶的一些地方
js总体来说,是个不错的语言,最大的好处的是简单. 但这个基于es6的一些js也有一些非常怪异的写法,这是非常令人憎恶的地方. c++总体上也算不错,但为什么不是很受欢迎,因为它把自己搞得太复杂了,复 ...