html函数怎么比较变量,一篇文章带你了解JavaScript中的语法,数据类型,流程控制语句以及函数...

18e64738239b704cd5060871a0d62222.png

作者 | Jeskson

来源 | 达达前端小酒馆

1

JavaScript有多重要啊,才能让我说说一下,其中的语法,操作符,数据类型,内置功能等。

语法:

在JavaScript中的变量,函数名和操作符都是区分大小写的,所以变量名Da和变量名da分别为两个不同的变量。

标识符:

什么是标识符?它是指变量,函数,属性的名称,以及函数的参数。

标识符的规则:

一:第一个字符必须是,一个字母,下划线,或者是,一个美元符号

二:后面的字符,可以是字母,下划线,或是数字。

在JavaScript中标识符采用驼峰大小写格式,第一个字母为小写,其他后面的每个单词的开头首字母都是大写。

注解:

// 单行注解

/ *

* 多行注解

*

*/

严格模式:

"use strict";

ECMAScript5引入了严格模式的概念,为JavaScript定义了一种不同的解析和执行模型。

这段代码表示它是一个编译指示,也可以在函数中执行严格模式:

function daDa(){

"use strict";

// 函数体

}

关键字和保留字

ECMAScription的全部关键字:

break、else、new、var、 case、

finally 、 return、 void 、

catch 、for 、switch 、

while 、 continue、 function 、

this 、 with 、default 、 if 、

throw 、 delete 、 in 、 try 、

do 、 instranceof、 typeof

ECMA第3版定义的全部保留字:

abstract 、 enum 、int 、

short 、 boolean 、export 、

interface、 static、 byte 、

extends 、 long 、 super 、 char 、

final 、native 、synchronized 、 class 、

float 、 package 、throws 、 const 、

goto 、private 、transient 、 debugger 、

implements 、protected 、 volatile 、

double 、import 、public

Javascript 的保留关键字不可以用作变量、标签或者函数名。有些保留关键字是作为 Javascript 以后扩展使用。

JavaScript保留关键字:

abstract,arguments,boolean,break,byte

case,catch,char,class,const

continue,debugger,default,delete,do

double,else,enum,eval,export,

extends,false,final,finally,float,

for,function,goto,if,implements

import,in,instanceof,int,interface

let,long,native,new,null

package,private,protected,public,return

short,static,super,switch,synchronized

this,throw,throws,transient,true

try,typeof,var,void,volatile

while,with,yield

JavaScript对象,属性和方法

Array,Date,eval,function,hasOwnProperty

Infinity,isFinite,isNaN,isPrototypeOf,length

Math,NaN,name,Number,Object

prototype,String,toString,undefined,valueOf

变量:

变量就是一个用于保存值的占位符,定义变量的关键字为var

var dada;

一个关键字,一个标识符

一个变量可以保存任何值,如果没有进行初始化,那么变量会保存一个特殊的值为undefined。

var dada = "dada";

定义变量的同时,可以进行初始化变量,赋予值,初始化的过程就是一个简单的赋予一个值的过程,所以可以在修改值的同时,一起修改值的类型。

var dada = "dada";

dada = 12;

这种行为是可行的,但是不建议这样做。

示例:

function dada(){

var msg = "hello dada"; // 局部变量

}

dada();

console.log(msg);

5465b26581d3032c4e4218bf54a52afe.png

1673a8c424ba16a99e0507a1a513c8d9.png

这个函数里的变量,使用var定义msg,赋值为hello dada。

当调用这个函数时,就会创建 var msg = "hello dada",创建变量并赋值。记住:局部变量的定义只在它的作用域里有效,不在里面时,这个变量就会被销毁。

那么如何解决这样的情况呢?

有局部变量,就有个全局变量,即局部变量作用域和全局变量作用域

创建一个全局变量的作用域:

function dada() {

msg = 'dada'; // 全局变量

}

dada();

console.log(msg);

08772205a951ca7d08c27149eba6aa94.png

这是为什么呢?看到没有我这里没有加上var关键字操作符。这个时候的msg就是全局变量,可以在函数外部的如何地方被调用。

414dc930083cbbaf538b65976869e522.png

省略了var操作符还是不对的,不建议这样做,如果给没有声明的变量赋值,在严格模式下就会导致错误,抛出ReferenceError错误。

介绍一下,变量还可以使用一条语句定义多个变量,如下:

var dada = "da", da2 = "da2", age = 12;

2

数据类型:

fa1c86eba062d78fc1f5e37af94c43ac.png

Object为复杂的数据类型:本质上是一组无序的键值对组成。

typeof操作符

typeof操作符用来判断变量的数据类型

62f3edab40d899ea0e3126e6cefb9d97.png

typeof null

"object"

// object这个值是对象或null

undefined类型

undefined类型是一个值,即为undefined。如果使用var声明变量时,没有进行初始化,那么这个变量的值为undefined。

d268606501dfa45985991eae0a213092.png

ca4ee452654ab87309ed3223dc783958.png

使用undefined值显式初始化了变量,比较两个是否相等,可以看出,da变量默认就是在没有初始化时就是undefined。

ff9c2f6cf9a0cc3514a4ac64249c37f5.png

输出一个声明但是未初始化的变量,取值为undefined,而对没有声明的变量就会报错。

ac3a2a9b5ac716773729514beda38574.png

Null类型

null值表示一个空对象的指针,所以:

39deea6530e2212f9e9b197971cf437d.png

var da = null;

console.log(da);

VM1174:2 null

undefined

console.log(typeof da);

VM1243:1 object

undefined

if (dashu != null) {

// null 一个空指针的对象

}

如果一个变量预判断是一个保存对象的,可以直接检查null值

你去打印,会发现:

31d62662ddb84f3617b73d76bd0c0d68.png

因为,undefined值是派生自null值的。

如何区别null值和undefined值?

undefined值,一个变量还没有初始化时,默认为undefined值,没有必要去显式地设置为undefined值,但是,对于null来说,null值是一个空对象的指针,如果意在变量保存的是对象,但还没有真正的保存对象,就可以先让变量保存null值先。

Boolean类型:

boolean类型有两个字面值,一种为true,一种为false。

a54c99feffba50d35b3251cc86c29cf1.png

各种类型转换为Boolean值,调用Boolean()函数:

String 任何非空的字符串 为 true

"" 空字符串 为 false

6f08ee0a78489f9725df3b796a099a7c.png

Number 任何非零数字值 为 true

0和NaN 为 false

6ef7a81200588fc62482c3dadb32f7e1.png

Object 任何对象都为 true

null 为 false

c644b93801496cb0ee89be9b3fbc10f0.png

93f12e1fc37933465e883acf179b6737.png

console.log(Boolean(undefined));

VM2052:1 false

Number类型:

八进制字面值第一位必须是0,然后是0到7,八进制在严格模式下是无效的,16进制前两位必须是0x,后面是0到9,以及A到F。所有的八进制和十六进制在运算时都转换为十进制数值。

a543d09df84706a8689d3155a46cc156.png

if(0.1+0.2==0.3){

console.log("da");

}

undefined

if(0.3==0.3){

console.log("da");

}

VM2148:2 da

undefined

if((0.1+0.2)==0.3){

console.log("da");

}

undefined

注意不要使用浮点数值计算,会产生舍入误差问题,有的会有的不会。

数值范围:

907de2d238cc3601d4f95587e22f011f.png

Number.MIN_VALUE

5e-324

Number.MAX_VALUE

1.7976931348623157e+308

超出部分,自动转换为Infinity值

正无穷Infinity,负无穷-Infinity,它们都不能参与计算的,如何判断数值在其范围内,使用isFinite()函数。

c09e0683551a44c32dd7c9edeeced967.png

Number.MIN_VALUE

5e-324

Number.MAX_VALUE

1.7976931348623157e+308

isFinite(1);

true

isFinite(1.7976931348623157e+309);

false

NaN非数值,任何和NaN的操作,都返回NaN,NaN与任何值都不相等,包括自己,返回false。

常用的函数判断是否为数值,isNaN()函数用来判断这个参数是否“不是数值”。

d40446b896733ddfc66940b37e16970a.png

6524d94ec08937d055f2cea81c6753ed.png

数值转换:

Number()函数用于把任何数据类型转换为数值。

parseInt()函数和parseFloat()函数把字符串转换为数值。

字符字面量,转义字符:

\n

换行

\t

制表

\b

退格

\r 回车

\\

斜杠

\'

单引号

\"

双引号

toString()函数转换为字符串,通过指定基数,改变输出的值

da.toString();

toString()不包含null和undefined

String()函数能将任何类型的值转换为字符串

包括null和undefined

999d61c7b39b8983cc933ec83824681d.png

3

Object类型

var dada = new Object;

b4911249d7c212eb1c73807017038ed5.png

Object每个实例中的方法和属性:

constructor,保留着用于创建当前对象的函数,constructor构造函数就是Object()。

hasOwnProperty(propertyName),用于检查给定的属性在当前对象实例汇总是否存在。

da.hasOwnProperty("name")

isPrototypeOf(object),用于检查传入的对象是否是当前对象的原型。

toLocaleString(),返回对象的字符串表示,该字符串与执行环节的地区对应。

toString(),返回对象的字符串表示。

valueOf(),返回对象的字符串,数值或是布尔值的表示。

操作符:

05fb7b062c8af7666ae31bd9b364cc87.png

按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制、十六进制或八进制数值。例如,十进制数9,用二进制表示则为1001。按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。

与(&)、非(~)、或(|)、异或(^)

c3f638358d4e66e7fb6e2c60d04f3fee.png

<< (左移)

9 (base 10): 00000000000000000000000000001001 (base 2)

--------------------------------

9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10)

>> (有符号右移)

9 (base 10): 00000000000000000000000000001001 (base 2)

--------------------------------

9 >> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)

-9 (base 10): 11111111111111111111111111110111 (base 2)

--------------------------------

-9 >> 2 (base 10): 11111111111111111111111111111101 (base 2) = -3 (base 10)

面试题:

乘法,如果有一个操作符为NaN,结果都是NaN;如果是Infinity与0相乘,结果为NaN;如果Infinity与非0数值相乘,则结果是Infinity或-Infinity,屈居于有符号操作数的符号,Infinity与Infinity相乘结果是Infinity。

加法,Infinity加Infinity,结果Infinity;如果-Infinity加-Infinity结果是-Infinity;Infinity加-Infinity结果是NaN;+0加+0为+0;-0加-0为-0;+0加-0,结果为+0。

减法,Infinity减Infinity结果为NaN,-Infinity减-Infinity结果为NaN,Infinity减-Infinity结果为Infinity,-Infinity减Infinity结果为-Infinity。

三元运算符:

var da == "da" == "da" ? "1" : "2";

流程控制语句:

if(){

}else if(){

}else{

}

do {

}while();

while(){

}

for(var i=0;i

}

for(var item in list){

}

label语句用来在代码中添加标签的:

label: statement

start: for(var i=0; i

}

break语句的使用,立即退出循环,continue退出当前循环,进行下一次的循环。

switch(i){

case 1:

break;

case 2:

// ...

break;

default:

//...

}

函数:

function da(arg0, arg1,...agen){

//...

}

8e7d7256fbb1949894fba5bd8eefd3b1.png

注: 现在八进制数要用,0o前缀

数字以0为前缀严格模式要报错

❤️ 不要忘记留下你学习的脚印 [点赞 + 收藏 + 评论]

作者Info:

【作者】:Jeskson

【原创公众号】:达达前端小酒馆。

【福利】:公众号回复 “资料” 送自学资料大礼包(进群分享,想要啥就说哈,看我有没有)!

【转载说明】:转载请说明出处,谢谢合作!~

大前端开发,定位前端开发技术栈博客,PHP后台知识点,web全栈技术领域,数据结构与算法、网络原理等通俗易懂的呈现给小伙伴。谢谢支持,承蒙厚爱!!!

若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理。

请点赞!因为你们的赞同/鼓励是我写作的最大动力!

欢迎关注达达的CSDN!

这是一个有质量,有态度的博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值