JS(JavaScript)的一些基本知识(未完待续)

JS简介

JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。 (摘至百度百科)

JS写法

  • JS可以写在html文件中的,这是内部写法
    标签:
 <script></script>
  • 它还可以写在JS文件中,然后在Html中通过script标签引入
 <script src="out.js"></script>
  • 把JS代码现在开始标签中,当成开始标签的属性

JS语法

  1. 区分大小写。
  2. 忽略空白格。
  3. 语句分号可以加也可以不加,但是如果加了就所有都加上,不加就所有都不要加。
  4. 注释:单行注释用//,多行注释用/多行注释/。
  5. 标识符和关键字。

JS变量

变量定义

变量指的是内存中的一个地址

变量名

变量名是指内存空间中地址的别名

变量值

变量值指的是存储在内存空间中的一种状态(数值)

如何定义变量

var a=10                                    //变量名指a,变量值是110

变量的分类

变量分为全局变量和局部变量

  1. 全局变量:定义在函数外面;
  2. 局部变量:写在函数里面的,其中函数必须由function来声明。

JS中的数据类型

不管什么语言中,由于不同类型的数据所占据的空间大小不一样,所以为了更合理的利用内存空间,才有了数据类型。这里讲的的数据类型是指变量值的数据类型。

数据类型的分类:

基本数据类型
  1. Number:指的是数字。
    1)它对应的数值有无数个;
    2)不分整数和小数;
    3)可以通过typeof来查看一个变量值的数据类型:console.log(typeof a);
    4)最大值,最小值:console.log(Number.MAX_VALUE),console.log(Number.MIN_VALUE);
    5)number可通过不同的进制来显示;
    6)NaN;Not a Number,指的是不是数字;
    7)JS中不对小数运算,如果要运算,必须先转化为整数。
  2. String:字符串类型,在JS中,它不像其他语言分字符和字符串,统称为字符串。
    1)在JS中,使用“”包含字符串,如果不包就会被当成变量;
    2)单引号不要嵌套单引号,双引号里面也不能嵌套双引号,外双内单或者外单内双;
    3)对应的数据有无数个。
  3. Boolean:布尔类型,它有两个值为ture和false。ture和Ture是不一样的。
  4. Undefiend:表示没有值。它的值是undefined,
  5. Null:空值。
引用数据类型

只有Object。
在这里插入图片描述

JS数据类型的转化

它的前提:运算符两侧的数据类型要一致,否则JS解释器会帮你转化。
转化分为两种:隐式类型转化和强制类型转化。

隐式类型转化

静悄悄地,不知不觉地就进行了类型转化。

 console.log([1, 2] + 1); //输出:"1,21"
console.log([1, 2] + true); //输出:"1,2true"
console.log([1, 2] + "love"); //输出:"1,2love"
console.log([1, 2] + null); //输出:"1,2null"
console.log([1, 2] + undefined); //输出:"1,2undefined"
console.log([1, 2] + [3, 4]); //输出:"1,23,4"

在if中:NaN,undefined,null,flase,0,-0,“”会出现flase,其他的都是ture。

强制类型转化:

写代码进行转换,比如下面将其他类型转换成布尔类型:
在这里插入图片描述

代码段

代码段(code segment / text segment)通常是指用来存放程序执行代码的一块内存区域。
在JS中,一个script标签就是一个代码段。JS在执行时时一个代码段一个代码段的执行,执行过程分为两个阶段,一个是语法分析阶段,一个是预编译阶段,还有一个是代码执行阶段。

语法分析阶段

分析过程有:

  1. 页面产生便创建了GO全局对象(Global Object),也就是window对象;
  2. 第一个脚本文件加载;
  3. 脚本文件加载完成后开始分析语法是否合法;
  4. 准备开始预编译
预编译阶段

预编译又称为预处理,是做些代码文本的替换工作。是整个编译过程的最先做的工作。

  1. 对加var 的变量名进行提升,但是赋的值不会被提升,它们会被提升到代码段的最前边;
  2. function声明的函数提升,而函数提升的是整个函数声明
执行阶段

预编译结束后,就开始从上到下执行代码,直到数值的输出。

执行上下文(execute context)

简称EC,是给代码提供数据的。代码分为两类:一类是函数代码,一个函数就是一段代码,还有一个是全局代码,指的是函数外面的代码。
全局EC:全局代码在执行时,就会产生全局EC(G),全局的变量名和变量值储存在这里。
局部EC:函数代码在执行时,会产生局部EC,代用一个函数就产生一个EC。
EC栈:每产生一个EC就会被放入栈中。
GO:Global Object ,全局对象,也就是window对象。

加var的变量与不加var的变量的区别

  1. 在全局变量中,加var的变量名会被提升,而不加var的不会被提升;
  2. 不管变量名加没加var,他们都会被放到window里作为window的属性;
  3. 没有加var的变量,只能作为全局属性;
  4. 加var的局部变量,不会作为window的属性;
  5. 访问一个对象上不存在的属性,结果就是undfined。

undfined出现的地方

  1. 一个变量没有被赋值,则返回undfined;
  2. 一个函数没有返回值,则返回undfined。

函数表达式

可参考:https://www.cnblogs.com/ricky-wang/p/6804769.html

console.log(fn);
window.fn();
console.log(window.fn);
fn();
if("fn" in window){                     //在if中,如果有函数,此函数在预编译期间并不会直接提升到代码段的前面,仅仅是直接提升函数名,就是提升了函数的声明,也就是fn
  fn();                                 //如果条件满足的话,进入到条件后的第一件事就是给fn赋值,fn此时就是函数了
  function fn(){
    console.log("fn...");
  }
}
fn();

给函数传递参数

参数有形式参数,简称形参,形参一般就是函数内部的局部变量;还有实际参数,简称实参。

function f(a,b){
  console.log(a+b);     //a,b都是形式参数,也就是形参
}
f(1,2);                 // 1,2是实际参数,而函数调用的过程就是实参向形参赋值的过程

数据的存储

内存分为堆内存和栈内存,基本数据类型储存在栈中,函数是引用数据类型存储在堆中
在这里插入图片描述

作用域链

一般情况下,变量的取值会到创建这个变量的函数的作用域中取值,但如果当前的作用域中没有值时,就会到上级中找,直到找完全局的作用域,这一查找过程所形成的链条成为作用域链

let和const

let
  1. let声明的变量没有提升(或者提升了但是没有初始化)
  2. let配合{}也可以形成块级作用域
  3. 使用let声明的变量不会被挂载到GO中
  4. 使用let不能重复声明
const
  1. 声明的是一个常量
  2. 它不会被提升
  3. 它也会形成块级作用域
  4. 不能被挂载到GO中
  5. 不能够重复声明
  6. 声明常量是必须赋值

小结

本人纯js新手,所写的只是现阶段学习到的东西,全是干货,如有错误请大佬指正,勿喷。后面再学习到新的会再更新哦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值