[TOC]

✊总有人要成为第一,为什么不是你。

2021年07月27日

工作重点

1 工作重点事项 进度 已完成
2 上午讲JavaScript基础 已完成
- [x]

| | 3 | 下午摸鱼 | 已完成 |
- [x]

| | 4 | 晚上摸鱼 | 已完成 |
- [x]

|

遇到的问题和解决思路

遇到的问题

  1. 为什么JavaScript中的null返回值是对象

  2. 解决思路

  3. 对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 “object”


  4. 今日总结

    (1)变量的提升

    <!DOCTYPE html>










    (2)数据的类型

    <!DOCTYPE html>











    (3)复杂数据类型

    <!DOCTYPE html>










    (4)字面量

    <!DOCTYPE html>










续昨天

10.1.2 变量在内存中的存储

变量的本质是在内存中申请的一块用来存放数据的空间。

var age = 18;
var uname='张美丽';

neicun1.png

10.2 变量声明提升


变量被定义之后,你可以通过变量名称读取变量的值:

var myVariable = 'Hello JavaScript';

console.log(myVariable);

但是,在变量定义代码之前,通过变量名称读取变量的值,会出现什么情况呢:

console.log(myVariable); // undefined

var myVariable = 'Hello JavaScript';

由于变量的声明会被提升到当前作用域的最顶端,而赋值并不会被提升,因此上面的代码输出
undefined。可以使用下面的代码解释:

var myVariable;

console.log(myVariable); // undefined

myVariable = 'Hello JavaScript';

11. 数据类型(记忆)

  • 为什么需要数据类型
    在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。
    简单来说,数据类型就是数据的类别型号。比如姓名“张三”,年龄18,这些数据的类型是不一样的。
  • 变量的数据类型
    变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。
  • JavaScript是一种弱类型或者说动态类型的语言。在声明变量时,我们不要指定变量的类型,在程序运行过程中,类型会被自动确定。这意味着JS变量的内存空间中可以存放任意类型的数据。

shujuleixing.jpg

  • 基本数据类型:Undefined、 Null、 String、 Number、 Boolean、 Symbol (es6新出的,暂不不讨论这种类型)
var foo = 42; // 数字

foo = "bar"; // 字符串

foo = true; // 逻辑真

然而,在其他强类型编程语言中,变量的空间所能存放的数据类型是事先规定好的。

int num = 123; // 使用 int 关键字声明的变量空间中只能存放整数

string name = "李四"; // 使用 string 关键字声明的变量空间中只能存放字符串

float price = 2.98; // 使用 float 关键字声明的变量空间中只能存放浮点数

11.1 原始类型

Boolean 类型

布尔类型表示一个逻辑值,有两个值:true 和 false。

// 假设 true 表示男,false 表示女
var gender = false;

Number类型

数字类型用于表示数值,整数、浮点数(小数),还有一些带符号的值:+Infinity(正无穷大),-Infinity(负无穷大)和 NaN (非数值,Not a Number)。

var sec = 0b11001001;        // 二进制数表示的26
var oct = 032;        // 八进制数表示的26
var dec = 26;        // 十进制数26
var hex = 0x1a;        // 十六进制数表示的26
var fnum1 = 7.26;        // 标准格式
var fnum2 = -6.24;    // 标准格式
var fnum3 = 3.14E6;    // 科学计数法格式3.14*10 6次方
var fnum4 = 8.96E-3;    // 科学计数法格式8.96*10-3

String类型

字符串类型用于表示文本数据,使用单引号或双引号括起来,比如:’Hello World!’。

// 声明字符串时,可使用双引号,也可使用单引号,但是推荐使用单引号。

var slogan = 'Knowledge';        // 单引号,存放一个单词
var str = "the sky is blue.";     // 双引号,存放一个句子
var color = '"red"blue';         // 单引号中包含双引号
var food = "'pizza'bread";        // 双引号中包含单引号
var num = '', total = "";        // 定义空字符串

//打印一个 My name is "teacherxu"!
  • 转义字符
    zhuanyizifu.jpg
var say1 = 'I\'m is ...';       // 在控制台的输出结果:I'm is ...
var say2 = "\"Tom\"";           // 在控制台的输出结果:"Tom"

Undefined类型

Undefined 类型只有一个值,即
undefined。任何一个只声明而没有赋值的变量都会被隐式的(自动的)赋值为 undefined。例如:

var message;

console.log(message); //"undefined"

Null类型

Null 类型也只有一个值,即 null。

null是表示缺少的标识,指示变量未指向任何对象。把 null作为尚未创建的对象,也许更好理解。这也正是使用 typeof 操作符检测 null 值时会返回”object” 的原因,如下所示:

var myphone = null; // 未指向任何对象的变量

myphone = {

brand: '小米',

number: '13526471107'

};
  • 注意点:

与null不同的是,undefined表示没有为变量设置值,而null则表示变量(对象或地址)不存在或无效。

11.2 复杂数据类型(引用类型)


在计算机科学中, 对象是指内存中的可以被 [标识符] 引用的一块区域。

在 Javascript里,引用类型的数据指的是各种对象,例如,Object、Array、Date等,他们在内存中的存储方式与原始类型的数据不同。

以Object对象为例,Object对象是一组属性的集合。属性包含一个属性名和一个属性值,如下所示:

var person = {

  name: 'jxl',

  age: 20,

  id: 100

};

person变量的存储空间的数据如下:

地址存储图.png

11.3 字面量

在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。

数值字面量:8, 9, 10

字符串字面量:’软件开发程序员’, “大前端”

布尔字面量:true,false

11.4 检测数据类型


JavaScript中对于数据类型的检测提供了多种方式,现阶段我们需要了解以下这种:

  • typeof操作符
// 基本类型或原始类型

var myName = '张三';

var age = 18;

var gender = false;

var weight = undefined;

var phone = null;

// 检查原始数据的类型

console.log(typeof myName); // 'string'

console.log(typeof age); // 'number'

console.log(typeof gender); // 'boolean'

console.log(typeof weight); // 'undefined'

console.log(typeof phone); // 'object'

// 引用类型

var hobby = ['看电影', '学习'];

var car = {

color: '蓝色',

brand: '哈喽单车'

};

// 检查引用数据的类型

console.log(typeof car); // 'object'

*我可以

javascript的typeof返回哪些数据类型?

答案:string,boolean,number,undefined,function,object

自己总结

为什么JavaScript中的null返回值是对象
参考大佬:https://blog.csdn.net/weixin_40013817/article/details/103232806
在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 “object”
虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象然而 null 表示为全零,所以将它错误的判断为 object 。
值 null 特指对象的值未设置,是一个空指针对象。
null 是表示缺少的标识,指示变量未指向任何对象。把 null 作为尚未创建的对象
在基础数学运算中,null值将被转换为0

1. 基本数据类型
* String Number Boolean Null Undefined
* var a = 1;
* var b = a;//1
* a = 2;
* 赋值时,给的是值,a改变时,不影响b
2.* 引用数据类型
* Object
*
3. JS中的变量都是保存到栈内存中的,
* 基本数据类型的值直接在栈内存中存储,
* 值与值之间是独立存在,修改一个变量不会影响其他的变量
*
* 对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,
* 而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,
* 当一个通过一个变量修改属性时,另一个也会受到影响

4.javascript的typeof 数组和null是object
5.关于javascript中typeof 函数
function fun(){
// return “1”;
}
var fu = function(){};
console.log(typeof fun);//function
/*
因为fun()是打印返回值,若没有return则为undefined,
若有return,则返回return的值,是数字类型是Number,是字符串,则String.
*/
console.log(typeof fun());//undefined
console.log(typeof fu);//function
console.log(typeof fu());//undefined