文章目录

  • 前言
  • 变量 值类型 运算符
    • 1. var
    • 2. 基本语法
    • 3. 运算符
  • typeof 判断数据类型
  • 函数
  • 递归
  • 预编译
    • 预编译过程
  • 作用域链精解 立即执行 函数 闭包

前言


变量 值类型 运算符

1. var

  1. 变量名必须以英文字母,_,$ 开头
  2. 变量名可以包括英文字母,_, $, 数字
  3. 不可以用系统关键字,保留字作为变量名

2. 基本语法

值类型 — 数据类型

  1. 不可改变的原始值 (栈数据)stack
    Number String Boolean undefind null
    Number 数字类型 123 45.53 6673, String 字符串 “…” 或 '…’ 写的一段话字符串, Boolean 布尔值 true正1 false 反0,
    undefind 未定义 比如var a;没有赋值 变量提升, null 空 最初是用来定义空对象的 , object 对象,
  2. 引用值 (堆数据)heap
    array object function
  3. 引用值和原始值他们的不同是赋值形式 不可改变的原始值(只要写入值不可改变的)

栈stack

   var a = 1;//不可改变的原始值var b = a;a = 2;//覆盖console.log(a)//2

堆heap

 var arr = [1,2]//引用值创建一个房间存储值var newArr = arr;//创建一个新的变量数组名共同指向同一个房间newArr = [3,4]//给新变量名添加新创建房间值arr.push(5,6)//我们给第一个创建的房间push值,他新创建的房间名共同指向的房间1,2,console.log(newArr)//3,4console.log(arr)//1,2,5,6

Boolean 值 true false

  var a = Number(false)//0var b = Number(true);//1var c = Number(Boolean);//NAN

3. 运算符

  1. ‘+’ 数学运算 字符串拼接
  2. 任何数据类型加字符串都等于字符串
  3. - + * / = ()
  4. 优先级最弱= ,优先级最高()
  5. ++ -- += -= /= *= %=
    赋值顺序自右向左,运算自左向右先运算后赋值
  var a = 10var b = ++a -1 + a++console.log(a , b)//12,21

typeof 判断数据类型

null

  var num = null;console.log(typeof(num))//object

undefind

 var num = undefined;console.log(typeof(num))//undefind

number

var num = 1;
console.log(typeof(num))//number

string

var num = '1';
console.log(typeof(num))//string

javascript独有类型转换隐式类型转换

 var num = '2'-'1';console.log(typeof(num),num)//number 1
 var num = 2*'2';console.log(typeof(num),num)//number 4

显示类型转换

  var num = Number('123')console.log(typeof(num),num)//numkber 123
     var demo = nullvar num = Number(demo)console.log(typeof(num),num)//numkber 0var demo = undefinedvar num = Number(demo)console.log(typeof(num),num)//numkber NaNvar demo = 'string'var num = Number(demo)console.log(typeof(num),num)//numkber NaN

number转化

var num = number(false)
console.log(typeof(num),num)//numkber 0
var num = number(true)
console.log(typeof(num),num)//numkber 1

parseInt 不保留小数点 , parseFloat 保留小数点

parselnt() 取值范围是只看数字,不保留小数点
parseFloat()取值范围只看数字,并保留小数点

var num = parseInt('123qwe')
console.log(typeof(num),num)//numkber 123
var num = parseInt(123.9)
console.log(typeof(num),num)//numkber 123
var num = parseFloat(123.9)
console.log(typeof(num),num)//numkber 123.9
var num = parseInt(true) console.log(typeof(num),num)//numkber NaN
var num = parseInt(false)
console.log(typeof(num),num)//numkber NaN

parseInt(形式参数,redix进制)
redix取值范围 2-36 0

 var demo = 'a'//以目标进制为基底转化成16进制var num = parseInt(demo,16)console.log(typeof(num),num)//numkber 10var demo = 'b'//以目标进制为基底转化成16进制var num = parseInt(demo,16)console.log(typeof(num),num)//numkber 11

null undefind 不能用 toString() 以目标进制为基底转化成10进制

     var demo = 123//以redix为基底转化成16进制var num = demo.toString(8);console.log(typeof(num),num)//numkber 173var sum = 10101010;var sum = parseInt(sum,2)console.log(typeof(sum),sum)//number 170

== !== ===类型是否一致

1 == 1
true
1 == '1'
true
1 === '1'
false
1 !== '1'
true
1 !== '1'
true
NaN === NaN
false
undefined

只有在 console.log(typeof(a)) 未定义a不报错
console.log(typeof(typeof(a))) //string

 console.log(typeof(a))//undefindconsole.log(typeof(undefined))//undefindconsole.log(typeof(NaN))//numberconsole.log(typeof(null))//objectconsole.log(typeof(NaN))//numbervar a = "123abc"console.log(typeof(+a),a)//number 123abcconsole.log(typeof(!!a))//booleanconsole.log(typeof(a+''))//stringconsole.log(1 == '1')//trueconsole.log(NaN==NaN)//falseconsole.log(NaN==undefined)//falseconsole.log('11'+11)//1111 如果 - 0console.log(1 === '1')//flaseconsole.log(parseInt('123abc'))//123var num = 123.123345789console.log(num.toFixed(3))

函数

命名函数表达式

var test = function theFrstName() {document.write('a')}
document.write(test)

匿名函数表达式

  var text = function(){document.write('b')}document.write(text)

参数

function sum (a,b){//形参 占位符var c = a + b;console.log(c)}sum(1,2)//实参 数值
function sum (a,b){if(a > 5){document.write(a+b)}else if(a<5){document.write(a-b)}else{document.write(10)}}sum(4,2)

判断function 形参 实参 那个多

 function tostr(a,b,c,d){if(tostr.length > tostr.arguments){console.log('形参')}else if(tostr <  tostr.arguments){console.log('实参多')}else{console.log('相等')}}tostr(1,2,3,4)

函数形参的和

function sum(){var reult = 0;for(var a = 0 ; a < arguments.length; a++){reult += arguments[a]}console.log(reult)}sum(1,2)

函数判断输入动物返回动物

function max(target){switch(target){case "dog": document.write("狗") breakcase "猫": document.write("cat") break}}max('dog')

函数输入数字倒叙汉子输出

 var num = window.prompt('input')function str(){var result = 0;for(var a = num.length -1; a >= 0; a--){result += newStr(num[a])console.log(result)}}str()function newStr(target){switch(target){case "1" : document.write('一')breakcase "2" : document.write('俩')breakcase "3" : document.write('仨')break}}

递归

找规律找出口 return 公式

n的阶乘

function mul(n){if(n == 1){return 1}return  n * mul(n-1)}mul(5)

函数嵌套 b function 可以访问外部 a function 吗? 内部函数可以访问外部函数
a 函数可以访问外部 b 函数吗? 外部函数不可以访问内部函数
越内部函数权限越大可以访问更多外部函数

function test(){var a = 123;function demo(){var b = 456;document.write(a)}document.write(b+' ')demo()}test()

Uncaught ReferenceError: b is not defined

预编译

请问 可以 执行 吗?

function testcase() {console.log(typeof(typeof(undefined)))//string}testcase()

of course
如果我放到 函数最上面 调用 函数名 还可以执行吗?

testcase()
function testcase() {console.log(typeof(typeof(undefined)))//string}

same
可以输出吗?

 var a = 123;console.log(a)

of course
Can I output

console.log(b)
var b = 456;

undefind

imply gloabal 暗示全局变量,如果变量未经声明赋值,此变量就为全局对象
如果未经声明直接赋值 默认变量体 给window也就是全局 window就是全局对象 全局域

 a = 123;console.log(a)
window.a = 123;
访问 a
window.a
123

声明的一切全局变量都归window所有

 function test() {var a = 123;}test()console.log(window.a)//undefind

为什么会出现undefind 因为function 它是一个单独的作用域并不是全局所以不归window所有

预编译过程

预编译过程发生在 函数执行前一刻
1.创建AO 对象 作用域执行期上下文
AO{ }
找形参变量声明,将变量和形参作为AO属性名,值为undefind
将实参值形参统一
在函数体里面找函数声明,赋予函数体

 function fn(a){console.log(a)// f a(){}var a = 123;console.log(a)//123function a(){}console.log(a)//123var b = function(){}console.log(b)//f() {}function d() {}}fn(1)

作用域链精解 立即执行 函数 闭包

[[scope]]:每个javascript函数都是一个对象,对象中有写属性我们可以访问,但有些不可以。有些属性仅供javascrip引擎存取,[[scope]]就是其中一个。[[scope]]指的就是我们所说的作用域,其中存储了运行期上下文集合。
作用域链: [[scope]]中所存储的执行上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫作用域链。

执行期上下文:当函数执行时,会创建一个称为 执行期上下文 的内部对象 。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行期上下文被销毁。
查找变量: 从作用域链的顶端依次向下查找。

♣♠JavaScript相关推荐

  1. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  2. 【JavaScript总结】JavaScript语法基础:JS高级语法

    作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...

  3. 【JavaScript总结】JavaScript语法基础:DOM

    ->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...

  4. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  5. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  6. 【JavaScript总结】JavaScript发展与学习内容

    发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...

  7. Python:模拟登录、点击和执行 JavaScript 语句案例

    案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...

  8. [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)

    课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...

  9. [JavaScript] JavaScript 数组挖掘,不只是讲数组哟

    课程来源:后盾人 数组引用类型分析 数组的定义 const array = new Array('hello', 'dust', 1, 2, 3, 4, 5) console.log(array) l ...

  10. linux下用js生成xml,js2xml:将javascript字符串转换为xml

    有时候爬数据遇到像下面这种,数据在script标签中以javascript形式存在. var totalReviewsValue = 32; var averageRating = 4.5; if(t ...

最新文章

  1. 自动生成Mapper文件(基于Mybatis Maven插件)
  2. Linux中的用户和组
  3. 【Linux】24.gdb调试和coredump
  4. 大整数乘法(Java)
  5. 如何将知识引入机器学习模型提升泛化能力?
  6. Python读取word文档(python-docx包)
  7. 对Redis配置中bind的探索
  8. 给Bert加速吧!NLP中的知识蒸馏Distilled BiLSTM论文解读
  9. 使用Emit的时候类型XXX尚未完成
  10. python3实现扫码获取微信openid功能
  11. KETTLE的文本文件输出
  12. 虚拟机运行python_虚的解释|虚的意思|汉典“虚”字的基本解释
  13. Unity利用SMSSDK实现短信验证码(附源代码)
  14. ios-自建网页在浏览器安装ipa包
  15. 精细化运营:RFM模型在手游付费用户分群中的优化与应用
  16. 短信验证码是什么?短信验证码是什么意思
  17. 利用ICommand和ITool重写Arcengine中控件的事件
  18. 适合理工直男的钟平老师逻辑英语学习笔记
  19. python将图片转换为csv
  20. python变量名可以用下划线开头吗_python以下划线开头的变量和函数的作用

热门文章

  1. 解决Idea的中文乱码问题
  2. 干货!影视剪辑高清视频素材如何下载?大神精选7大影视网站
  3. 高通骁龙8cx Gen3 相当于什么性能水平 骁龙8cx Gen3参数
  4. python对两个数组进行合并排列
  5. 冬季必备五条养生小知识
  6. cv::calcHist()
  7. word 转excel表格 表示匹配所有字符^ 之word通配符
  8. html中空心圆圈怎么表示,html5使用canvas画空心圆与实心圆
  9. 1688店铺列表部分示例
  10. sql显错注入靶机演示