为了账号安全,请及时绑定邮箱和手机立即绑定

#hello,JS:01数据类型、运算符、运算符优先级

标签:
JavaScript

前言:

最近在学习javascript中数据类型、运算符,以及运算符优先级等相关基础知识,相对简单、基础但也很重要。加上老师的推荐看了阮一峰老师所写的《javascript教程》。从中刷新了过往认知的概念和固有的规则,明白了javascript的出现会打破以往的惯性思维。在这里1+1不再一定等于2,你常见的算数符号也不是你通常认为的那种作用,一个数字可以是表达式,同时一个表达式也是一个值。。。所以学习这样一种新知识,你要学会先接受,然后敢于去打破自身的思维惯性,之后才能勇于迎接更多挑战。

自我总结:

值===数据类型——转化为:数值(number)/字符串(string)/布尔值(boolean)/undefined/null/对象(object)——转为Nan或者数字(其中:(1)数字+undefined===Nan (2)null===(undefined===Nan ) ——判断布尔值true or false

一、基本语法

1、调试

打开chrome开发工具:右键——检查——console(esc键调取另一个console)

  • Win   F12

  • Mac   Command + Option + I

2、语句

(1)语句 VS 表达式

A、区别:

  • 语句,主要为了进行某种任务而进行的操作,一般情况下不需要返回值;

  • 表达式,为了得到返回值的计算式,一定会返回一个值。凡是JavaScript语言中预期为值的地方,都可以使用表达式。比如,赋值语句的等号右边,预期是一个值,因此可以放置各种表达式

B、例子:

  • 赋值语句:var a = 1 + 3; //先用var命令,声明了变量a,然后将1 + 3的运算结果赋值给变量a

  • 表达式:1 + 3

(2)分号

分号前面可以没有任何内容,JavaScript引擎将其视为空语句。

;;;

A、语句,以分号结尾。一个分号就表示一个语句结束。多个语句可以写在一行内。不需要加分号,换行默认上一行为语句。

var a =  1  +  3  ;  
var b =  'abc'; 
/*或*/var a =  3 var b =  4  var c = a+b

B、表达式不需要分号结尾。一旦在表达式后面添加分号,则JavaScript引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。下面两行语句有返回值,但是没有任何意义,因为只是返回一个单纯的值,没有任何其他操作。

1  +  3;  //语句,但无任何意义 
 'abc';

如图:


webp

image

3、变量

(1)定义

最前面的var是变量声明命令。它表示通知解释引擎,要创建一个变量a(相当于申请了1个内存放在变量a这里)。

变量是对“值”的引用,使用变量等同于引用一个值。每一个变量都有一个变量名。

var a =  1;

(2)变量提升

A、定义:

变量提升(hoisting),即JavaScript引擎的工作方式是:先解析代码获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有变量的声明语句,都会被提升到代码的头部,如:

//假设 
   var a = 1//这里会产生一个变量提升
    var a ;
    a =1;
或
    a = 3
    var a//控制台显示并不会报错,只要有var变量命令的声明,默认情况下就会自动提升到最前面,之后再作赋值

总结:
变量提升只对var命令声明的变量有效,如果一个变量不是用var命令声明的,就不会发生变量提升。

B、说说变量提升的几种场景

第1种场景:

console.log(a);  var a =  1;

代码首先使用console.log方法,在控制台显示变量a的值。这时变量a还没有声明和赋值,所以这是一种错误的做法,但是实际上不会报错。因为有var存在,即也存在变量提升,引擎中真正运行的是下面这段代码:

var a; console.log(a); a =  1;

最后的结果是显示undefined,表示变量a已声明,且位于最前面,但还未赋值。

注:
这种变量提升的技巧很重要,与之后函数作用,复杂函数执行时所出现的一些情况都可解释

第2种场景:

console.log(b); b =  1;

语句将会报错,提示“ReferenceError:b is not defined”,即变量b未声明,这是因为b不是用var命令声明的,JavaScript引擎不会将其提升,而只是视为对顶层对象的b属性的赋值。

4、标识符

(1)定义:

标识符(identifier),用来识别具体对象的一个名称。最常见标识符:变量名、函数名。

注:
JavaScript语言的标识符对大小写敏感,所以a和A是两个不同的标识符。

(2)标识符命名规则

A、第一个字符,可以是任意Unicode字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。

B、第二个字符及后面的字符,除了Unicode字母、美元符号和下划线,还可以用数字0-9。

C、一些命名实例:

  • 下面这些都是合法的标识符。

arg0
_tmp$elemπ
  • 下面这些则是不合法的标识符。

1a  // 第一个字符不能是数字23  // 同上***  // 标识符不能包含星号a+b  // 标识符不能包含加号-d  // 标识符不能包含减号或连词线
  • 中文是合法的标识符,可以用作变量名。

var 临时变量 = 1;
  • JavaScript有一些保留字,不能用作标识符:

arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield

  • 三个词具有特别含义,也不应该用作标识符:

InfinityNaNundefined

5、注释:

// 这是单行注释
/*
 这是
 多行
 注释
*/

//历史上JavaScript兼容HTML代码的注释,所以<!--和-->也被视为单行注释。
x = 1; <!-- x = 2;--> x = 3;

6、区块

(1)定义 JavaScript使用大括号,将多个相关的语句组合在一起,称为区块(block)。

(2)与大多数编程语言不一样,JavaScript的区块不构成单独的作用域(scope)。即区块中的变量与区块外的变量,属于同一个作用域。如:

{  var a = 1;
}
a // 1

二、数据类型

1、定义

JS语言的每一个值,都属于某一种数据类型。

2、值所属的数据类型分类

JavaScript 的数据类型,共有6种:

注:
ES6 又新增了第七种 Symbol 类型的值

(1)数值(number):值为整数和小数(比如1和3.14)
(2)字符串(string):值为字符组成的文本(比如"Hello World")
(3)布尔值(boolean):值判定为true(真)和false(假)两个特定值

注:
用于询问的便可用boolean进行变量命名,如:

var isBoy = true

(4)undefined:值判定为未处理,未定义或不存在。目前未定义所以此处暂时没有任何值,但之后可以去放东西。

注:
一个变量没有赋值,只能是undefined,不会是null

(5)null:值为表示经过处理之后的无值,即此处的值就是“无”的状态。

(6)对象(object):或称“引用类型”,各种值组成的集合。对象=属性+值

对象又可以分成三个子类型:

  • 狭义的对象(object)

  • 数组(array)

  • 函数(function)

3、typeof 运算符(用来确定值所属的数据类型)

(1)三种运算符用来确定数据类型
运算符,用于连接简单表达式,组成一个复杂的表达式(即通过一个关键字,后面加一个变量或值,得出一个结果)
JavaScript有三种方法,可以确定一个值到底属于什么类型。

  • typeof运算符

  • instanceof运算符

  • Object.prototype.toString方法

(2)作用
typeof可以判断一个变量或可以返回一个值为哪种数据类型,如:

※数值、字符串、布尔值分别返回numberstringboolean

//数值、字符串、布尔值分别返回number、string、boolean。typeof  123// "number"typeof  '123'// "string"typeof  false// "boolean"

※函数返回function。

function f(){

}typeof f// "function"

undefined返回 undefined

typeof  undefined// "undefined"

※ 利用这一点,typeof用来检查一个没有声明的变量,而不报错。如代码中变量v没有用var命令声明,直接使用就会报错;但放在typeof后面就不报错了,而是返回undefined

v// ReferenceError: v is not defined  typeof v// "undefined"

※实际编程中,变量v要用var命令声明,这个特点通常用在判断语句。

// 错误的写法if (v) {  // ...}// ReferenceError: v is not defined// 正确的写法if (typeof v === "undefined") {  // ...}

※除此以外,其他情况都返回object

//除此以外,其他情况都返回objecttypeof window   // "object"typeof {}      // "object"typeof []     // "object"typeof null   // "object"

实际操作中:


webp

image

如何判断一个变量是否为函数?


webp

image



作者:饥人谷_远方
链接:https://www.jianshu.com/p/388aa5642f8d


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消