经过找工作笔试的洗礼,感觉自己js语法方面掌握的不是很系统,今天来梳理下——变量以及运算符。

基础篇

和C语言的不同点:是一种弱类型语言,申明变量时不需要指定类型;变量名的命名方法也有不同;简单类型种类也有不同;类型可以相互转化

1.命名

是以字母,_,$开头的,由数字,字母,下划线 $组成的,不包括关键子,区分大小写的串称为标识符(加入了美元符号,不能以数字开头啦)。

2. 申明

形式:var  keyname; 可以多个一起申明,可以申明时初始化。

eg: var obj; var arr=[], objArr={};

注:(1)不需要申明类型,会根据程序的运行 自动转换类型。(2)没有定义就使用的,会报错;申明了,没有赋值的是undefinedd类型;(3)没有使用var申明的是全局变量,关于全局变量下面会具体分析。

3.变量类型

简单类型:boolean  string  number  undefined null

注意点:

boolean:其值是true,false 也会转换为 0,1 使用, Isload()==1;

string: 当个字符,或者字符串都是string类型;可以用单引号或者双引号都可以var str='adafsd', str2="abc",其他同C语言;

number:表示 整数,小数;整数包括十进制,八进制(078),十六进制(ox78);数字常量:(Infinity 表示正无穷大  NaN 表示非数字)

null:是空类型,只有一个值null.表示没有数据。

复杂类型:Array  object

Array:是数组类型,可以用下标访问,如:var  t=[a,b,c];可以是复杂数组类型:var t=[{a=b},{a2=b}]

object: 对象类型,可以表示对象的 属性 -值 ,键值对。可以嵌套任意类型。访问用.进行访问。

4.传值和传址

当变量时简单类型时,是传值的;如果变量时复杂变量时,是传址的,及,传递的是原对象的引用(可以是指针,或者别名,指向的是原对象的的内存空间)。

5. 堆栈

简单类型 存放在栈中,复杂类型存放在堆中,通过引用来操作;栈比堆快,栈可以共享,栈中的内容生存周期是和上下文相关,离开上下文就消亡。这里提到了共享.

eg: var a="abc" ;var b="abc";  这时 a===b(true);因为 abc存放在栈中,可以共享。

var a=new string("abc"); var b="abc"; var c=new string("abc"); 这时 a!==b!==c;在堆中时运行是分配内存,不可以共享,并且堆中的东西和栈中更不相等。

顺便 说下,内存管理。javascript中有内存管理机制,只要是没有人再引用这个单元时,垃圾回收机制(GC)会自动收回内存。

垃圾回收:主要通过标记法和引用法两种方式。标记法策略:当变量进入一个上下文就为变量标记为“进入环境”,离开上下文就标记为“离开环境”,垃圾回收机制为每个在内存中的变量都进行标记,他会为每个进入上下文的变量或者引用的变量进行清除标记,如果在这之后加上的标记就表示是准备删除的数据。GC会回收内存,清除标记。引用法:记录引用他的次数,不引用时减1.

内存泄露:虽然有内存管理机制(和java类似),但是也存在内存泄露的情况。比如闭包。


提升篇

主要总结 数据类型转换,变量作用域,相关内容

   1.类型转换

分类:分为显示转换和隐式转换

a 、显示转换

转换为数字:Number(); parseInt(stirng,radix);parseFloat(string);

转换为字符串:String(); toString();

转换为布尔类型:Boolean(mix);

Number()规则

Number(Null)===0;

Number(undefinde)=NaN;

Number("")===0;

Number(boolean)===0/1;

Number(string):当只包含数字时返回数字;当包含数字是float类型时,返回小数;空字符串返回为0;否则返回为NaN

b 、隐式转换

1.递增符号的转换

1.  当变量时字符串时,会根据Number()规则,转换成数字,然后加++,--; 字符串中没有数字转换为NaN

2.  当变量时boolean时,会转换为0,1 ,进行++ --操作,变量从boolean 变为数字型。

3.Float 会自动+1;

总结:NaN,void,undefined,null ,以及常规的boolean-》0,1

NaN 运算符NaN(其他)结果为NaN(NaN是数字型,但是不是数字,每次都是计算机给分配的随机值,NaN===NaN(false))

null==undefined(true)在类型转换时unfinished=》null

null===undefined(false) 两个是不同的类型,不相等

void(任意):void  d ; 会将d的值清除 返回undefined,(void 返回undefined)

‘''=='0'(false)

"0"==0(true)

""==0(true)

void(2)+4=NaN (void(2)=>undefined=》NaN+4=NaN)

2. 作用域提升

变量必须要定义之后才能使用,但是在一个作用域中,如果先用,再定义也不会报错,只是出来的结果会不是想象中的。这个就是变量作用域提升。

原理:函数调用时,会建立上下文,(1)声明参数,并给参数赋值,(2)声明函数并给函数符函数的引用(3)声明变量,给变量赋值undefined(对于函数名和变量名重名的情况,会忽略变量的声明,变量名依然指向函数的引用)

然后才会处理this的指向,最后调用执行;可见在执行之前会将函数内部的所有变量声明,只是赋值为undefined,具体赋值要在执行期做。

所以类似 eg: alert(t); var t=30; alert(t); 输出: undefined 30

转载于:https://www.cnblogs.com/xuruweb/p/4027377.html

Javascript 基础—变量 运算符相关推荐

  1. JavaScript基础--变量、运算符

    JavaScript组成 ECMAScript ECMAScript 是由ECMA 国际( 原欧洲计算机制造商协会)进行标准化的一门编程语言,这种语言在万维网上应用广泛,它往往被称为 JavaScri ...

  2. 【JavaScript】JavaScript基础-变量、运算符与控制语句

    一.变量 变量: 定义一个变量,系统会为之分配一块内存,程序可以用变量名来表示这块内存中的数据. 由于javascript采用的是弱类型的变量形式,因此,在声明一个变量的时候,我们不必声明它的类型,但 ...

  3. JavaScript基础变量写法/弹窗写法

    目录 一.变量 1. 基础写法解释 2. 变量的命名规范 3. 保留关键词有哪些 4. 定义变量的各种写法 二.弹窗 一.变量 1. 基础写法解释 let x = 10; (使用let关键词定义/声明 ...

  4. python基础-变量运算符(3)

    一.注释 注释就是对代码的解释和说明.目的是为了让别人和自己很容易看懂.为了让别人一看就知道这段代码是做什么用的.正确的程序注释一般包括序言性注释和功能性注释.序言性注释的主要内容包括模块的接口.数据 ...

  5. javascript基础系列(入门前须知)

    -----------------------小历史---------------------------- javascript与java是两种语言,他们的创作公司不同,JavaScript当时是借 ...

  6. 五、前端开发-JavaScript基础

    五.前端开发语言体系-JavaScript基础 文章目录 五.前端开发语言体系-JavaScript基础 JavaScript基础 变量.值和类型 运算符和表达式 语句 数组 函数和对象 严格模式 类 ...

  7. 前端工程师自检清单(JavaScript基础)

    知识体系来源于一名[合格]前端工程师的自检清单 winter在他的<重学前端>课程中提到: 到现在为止,前端工程师已经成为研发体系中的重要岗位之一.可是,与此相对的是,我发现极少或者几乎没 ...

  8. JavaScript 基础1入门、变量、运算符、表达式、进制

    JavaScript 基础1 1.什么是javascript? 2.JavaScript能做什么? 3.JavaScript的历史 4.JavaScript入门 5.编写JS及如何运行JS 5.1.外 ...

  9. JavaScript基础(第一部分 -- 简介、注释、输入输出、变量、数据类型、运算符、流程控制)

    前言 根据视频和PPT整理 JavaScript基础语法-dom-bom-js-es6新语法-jQuery-数据可视化echarts黑马pink老师前端入门基础视频教程 视频对应资源(在视频简介里面) ...

最新文章

  1. (转载)浏览器兼容性问题大汇总
  2. 【PAT乙级】1033 旧键盘打字 (20 分)
  3. 工业互联网企业如何做,才能“赋能万物,连接未来”?
  4. VTK:八叉树可视化用法实战
  5. 向上类型转换VS向下类型转换
  6. 嵌入式操作系统内核原理和开发(事件)
  7. Android坡度计
  8. 《Java程序员职场全攻略:从小工到专家》连载十三:给自己估个好价
  9. current_session_context_class
  10. 【转】编辑器与IDE
  11. 工业级Pass云平台SpringCloudAlibaba综合项目实战(二):解决方案和工作效率
  12. 汽车故障码(P C B U)格式解析
  13. PDF文件如何提取页面,PDF提取页面的小技巧
  14. Ubuntu 20.04 源码编译Paddle2.2.2
  15. 你中了微软的圈套么?
  16. Pocket英语语法---六、感官动词接不同的动词表示什么意思
  17. 2022 百度面试题
  18. MyCat2分库分表的基本操作
  19. 想报考pmp(pmp报考费),一定要先经过培训机构吗?
  20. Python进程池之pool.map()函数传入多参数

热门文章

  1. windows聚焦图片为什么不更新了_为什么年轻明星都不愿意接周星驰的戏? 林更新道出了事情的真相|周星驰|林更新|喜剧之王|演员...
  2. ubuntu ln软连接硬连接
  3. 蓝桥杯 2011年第二届C语言初赛试题(5)
  4. python条件输出_python基础(二)条件判断、循环、格式化输出
  5. 为什么待办事项清单不管用
  6. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...
  7. css使按钮固定在界面上面
  8. wxlogin php,wxlogin.php
  9. 关于一些常见智柜问题的分析及解决办法
  10. C语言 删除文件 M,最全的C盘可删除文件清单