一篇文章带你了解JavaScript中的语法,数据类型,流程控制语句以及函数

作者 | 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);

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

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

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

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

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

function dada() {
 msg = 'dada'; // 全局变量
}

dada();

console.log(msg);

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

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

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

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

2

数据类型:

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

typeof操作符

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

typeof null
"object"

// object这个值是对象或null

undefined类型

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

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

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

Null类型

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

var da = null;
console.log(da);
VM1174:2 null
undefined

console.log(typeof da);
VM1243:1 object
undefined
if (dashu != null) {
 // null 一个空指针的对象
}

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

你去打印,会发现:

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

如何区别null值和undefined值?

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

Boolean类型:

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

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

String 任何非空的字符串 为 true
"" 空字符串 为 false

Number 任何非零数字值 为 true
0和NaN 为 false

Object 任何对象都为 true
null 为 false

console.log(Boolean(undefined));
VM2052:1 false

Number类型:

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

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

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

数值范围:

Number.MIN_VALUE
5e-324
Number.MAX_VALUE
1.7976931348623157e+308

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

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

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()函数用来判断这个参数是否“不是数值”。

数值转换:

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

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

字符字面量,转义字符:


\n
换行

\t
制表

\b
退格

\r 回车

\斜杠

\'
单引号

\"
双引号

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

da.toString();

toString()不包含null和undefined

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

包括null和undefined

3

Object类型

var dada = new Object;

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

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

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

da.hasOwnProperty("name")

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

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

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

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

操作符:

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

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

<< (左移)
     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<count;i++){
}

for(var item in list){
}

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

label: statement
start: for(var i=0; i<count; i++){
}

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

switch(i){
 case 1:
  break;
 case 2:
  // ...
  break;
 default:
  //...
}

函数:

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

注: 现在八进制数要用,0o前缀
数字以0为前缀严格模式要报错

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

作者Info:

【作者】:Jeskson
【原创公众号】:达达前端小酒馆。
【福利】:公众号回复 “资料” 送自学资料大礼包(进群分享,想要啥就说哈,看我有没有)!
【转载说明】:转载请说明出处,谢谢合作!~

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



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


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

欢迎关注达达的CSDN!

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

原文地址:https://www.cnblogs.com/dashucoding/p/12090915.html

时间: 2024-10-08 11:42:51

一篇文章带你了解JavaScript中的语法,数据类型,流程控制语句以及函数的相关文章

一篇文章带你了解JavaScript中的函数表达式,递归,闭包,变量,this对象,模块作用域

作者 | Jeskson 来源 | 达达前端小酒馆 定义函数的方式: 第一种为 函数声明: 第二种为 函数表达式. 语法: function functionName(arg0, arg1, arg2) { // 函数体 } 在Firefox,Safari,Chrome和Opera有效: 就是通过这个属性可以访问到这个函数指定的名字. console.log(functionName.name); // 'functionName' 函数声明: 它的一个重要特点就是:函数声明提升,就是在执行代码

一篇文章带你了解JavaScript中的变量,作用域和内存问题

作者 | Jeskson 来源 | 达达前端小酒馆 1 在JavaScript中的变量分别区分为两种: 一种为基本类型值,一种为引用类型值. 基本类型值指的是简单的数据段 引用类型值为可能由多个值组成的对象 引用类型的值是保存在内存中的对象,JavaScript不允许直接操作对象的内存空间,实际上操作对象的引用而不是实际对象. var dada = new Object(); undefined dada.name = "dada"; "dada" console.

一篇文章带你了解JavaScript中的基础算法之“字符串类”

作者 | Jeskson 来源 | 达达前端小酒馆 1 算法可以干什么呢?提高什么?有什么好处呢? 前端的同学需要提升编程核心内功,建立和健全算法知识体系,基础算法.数据结构.进阶算法,由浅入深讲解,透彻理解抽象算法,算法面试是关键一环,冲击大厂前端offer. 学习算法前掌握ES6哦!需要掌握单元测试的语言,Jest Jest is a delightful JavaScript Testing Framework with a focus on simplicity. It works wi

一篇文章带你了解JavaScript中的面向 “对象”

作者 | Jeskson 来源 | 达达前端小酒馆 安装webpack,打包工具,安装webpack-dev-server,安装babel解析es6语法,初始化npm环境. npm install webpack webpack-cli --save-dev webpack.dev.config.js module.exports = { entry: './src/index.js', output: { path: __dirname, filename: './release/bundle

一篇文章带你了解spring框架

虽然现在流行用SpringBoot了,很多配置已经简化和封装了,但是对于Spring的一些基础我们了解一些是对我们自己的架构思想很有帮助的!接下来和笔者一起来探讨一下Spring框架吧! 1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发.Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安

一篇文章助你理解Python3中字符串编码问题

前几天给大家介绍了unicode编码和utf-8编码的理论知识,以及Python2中字符串编码问题,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系和一篇文章助你理解Python2中字符串编码问题.下面在Python3环境中进行代码演示,分别Windows和Linux操作系统下进行演示,以加深对字符串编码的理解. 在Python2的Python文件的文件头往往会声明字符的编码格式,通过会使用代码"#-*- coding -*-"作为编码声明,如下图所示

JavaScript中两种类型的全局对象/函数(转)

转自:http://www.cnblogs.com/snandy/archive/2011/03/19/1988626.html 这里所说的JavaScript指浏览器环境中的包括宿主环境在内的.第一种是ECMAScript Global Object,第二种是宿主环境(Host)下的全局对象/函数. 一.核心JavaScript内置对象,即ECMAScript实现提供的不依赖于宿主环境的对象 这些对象在程序执行之前就已经(实例化)存在了.ECMAScript称为The Global Objec

Javascript中的七大数据类型(data types)

JavaScript中的七大数据类型 1.undefined 未定义 1 undefined 2.null 空 1 null 3.boolean  布尔型 1 true; 2 false; 4.string 字符串 1 var myName = "Anet"; 2 var myAge = "20"; 3 //myName.myAge均为字符串 5.symbol  符号(ES6新引进的数据类型:防止属性名冲突) 1 var hello = Symbol("h

一篇文章助你理解Python2中字符串编码问题

前几天给大家介绍了unicode编码和utf-8编码的理论知识,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系.下面在Python2环境中进行代码演示,分别Windows和Linux操作系统下进行演示,以加深对字符串编码的理解. 1.首先在Windows操作系统下的Python2环境中进行演示,我们都知道Python2中的编码问题经常出现,需要通过编码(encode)和解码(decode)进行实现.通过cmd进入命令行窗口,然后输入两个字符串'abc'和u'a