JavaScript第四版阅读ing~(1)

接下来会阅读JavaScript第四版,工作很忙,尽量做到每日一更,巩固基础,从第三章起值得留意的会写下读书笔记。

第三章

3.3变量 var let const
1、var message
这行代码定义了一个名为message的变量,可以用来保存任何值类型,在未初始化时会保存一个特殊值undefined,也可直接初始化赋值,赋值为‘hi’,但是并不代表message是字符串类型,只是简单的赋值而已。

2、所谓的变量提升,而且反复声名一个var变量也没有问题。

function foo(){
    
    
			console.log(age)
			var age =26
		}
		foo(); //undefined
		等价于:
		function foo(){
    
    
			var age;
			console.log(age);
			age = 26
		}
		foo(); //undefined

3、let的暂时性死区
let与var一个重要的区别就是let声名的变量不会再作用域中被提升

//name会被提升
console.log(name);//undefined
var name = 'Matt'//age不会被提升
console.log(age);//ReferenceError:age未定义
let age= 17

当然,这里书中说道Javascript引擎也会注意出现在后面的let声名,只不过在此之前不能以任何方式来引用未声名的变量。
与var关键字不同的是,let在全局声名的变量不会成为window对象的属性。

var name = 'Matt';
console.log(window.name);//Matt
let age= 17;
console.log(window.age);//undefined

let会被限制在块的作用域内,此处name相当与赋值在全局中
if(typeof name == ‘undefined’){
let name;
}
name = ‘zz’;

4、const
const和let基本相同,唯一区别就是用它声名的变量必须初始化,并且尝试修改const声名的变量会导致运行时错误。而且也不允许重复声名。
const声名只适用于它指向的变量的引用,例子如下:

const person = {
    
    }
person.name = 'zz'//ok的

3.4数据类型
ECMAScript有6中数据类型:Undefined、Null、Boolean、String、Number、Symbol
typeof检测null时会返回object,因为特殊值null会被认为是一个空对象引用。

typeof null //object

3.4.4 Boolean()转值
在这里插入图片描述
3.4.5 Number

NaN == NaN //false

isNaN用来判断这个参数是“不是数值”,它尝试转,任何不能转为数值的值都会导致函数返回true.
isNaN内部调用了对象的valueOf()方法,以及toString().

isNaN(false)//false,可以转为0

Number()转换规则:

  1. 数值直接返回
  2. null 返回为0
  3. undefined 返回为NaN
  4. 字符串:前面有零会忽略,空字符串为0,十六进制转为十进制等
let num1 = Number('Hello world')// NaN
let num2 = Number('') // 0
let num3 = Number('000011') //11
let num4 = Number(true)  //1

parseInt()转换规则

  1. 前面空格会被忽略,从第一个非空字符开始转换,如果不是数值字符、加号或者减号,立即返回NaN,这就意味着非空字符串也会返回NaN,区别于Number(),继续检测,直至碰到末尾或者非数值字符
let num1 = parseInt('1234blue') //1234
let num2 = parseInt('')  //NaN
let num3 = parseInt('22.5') //22

parseInt支持第二个参数,代表多少进制,当然写了第二个参数,第一个参数就可以省略进制
let num4 = parseInt('0xAF',16) //175
let num5 = parseInt('AF', 16) //175

parseFloat()转换规则

扫描二维码关注公众号,回复: 12621830 查看本文章
  1. 和parseInt类似,解析到字符串末尾或者小数点结束,这意味着第二个小数点就无效了,并且十六进制始终忽略字符串开头的0,因为这个函数直解析10进制值(这里我试了一下,let num1 = parseFloat(0xAF)这种是正常转换为175的,但是这种应该纯console.log(0xAF)也是175,所以了解下就好,parseInt()和parseFloat()更专注于字符串)
let num1 = parseFloat('1234blue')// 1234
let num2 = parseFloat('0XA') // 0
let num3 = parseFloat('22.5') // 22.5
let num4 = parseFloat('22.23.5') // 22.23
let num5 = parseFloat('0908.5') // 908.5
let num6 = parseFloat('222') // 222

ok今天到这,下班~~

猜你喜欢

转载自blog.csdn.net/weixin_46013619/article/details/109983985