♣♠JavaScript
文章目录
- 前言
- 变量 值类型 运算符
- 1. var
- 2. 基本语法
- 3. 运算符
- typeof 判断数据类型
- 函数
- 递归
- 预编译
- 预编译过程
- 作用域链精解 立即执行 函数 闭包
前言
变量 值类型 运算符
1. var
- 变量名必须以英文字母,_,$ 开头
- 变量名可以包括英文字母,_, $, 数字
- 不可以用系统关键字,保留字作为变量名
2. 基本语法
值类型 — 数据类型
- 不可改变的原始值 (栈数据)stack
Number String Boolean undefind null
Number 数字类型 123 45.53 6673, String 字符串 “…” 或 '…’ 写的一段话字符串, Boolean 布尔值 true正1 false 反0,
undefind 未定义 比如var a;没有赋值 变量提升, null 空 最初是用来定义空对象的 , object 对象,- 引用值 (堆数据)heap
array object function引用值和原始值他们的不同是赋值形式
不可改变的原始值(只要写入值不可改变的)
栈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. 运算符
- ‘+’ 数学运算 字符串拼接
- 任何数据类型加字符串都等于字符串
-
+
*
/
=
()
- 优先级最弱
=
,优先级最高()
++
--
+=
-=
/=
*=
%=
赋值顺序自右向左,运算自左向右先运算后赋值
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相关推荐
- 【AJAX】JavaScript的面向对象
Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...
- 【JavaScript总结】JavaScript语法基础:JS高级语法
作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...
- 【JavaScript总结】JavaScript语法基础:DOM
->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...
- 【JavaScript总结】JavaScript语法基础:JS编码
运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...
- 【JavaScript总结】JavaScript语法基础:数据类型
------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...
- 【JavaScript总结】JavaScript发展与学习内容
发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...
- Python:模拟登录、点击和执行 JavaScript 语句案例
案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...
- [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)
课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...
- [JavaScript] JavaScript 数组挖掘,不只是讲数组哟
课程来源:后盾人 数组引用类型分析 数组的定义 const array = new Array('hello', 'dust', 1, 2, 3, 4, 5) console.log(array) l ...
- linux下用js生成xml,js2xml:将javascript字符串转换为xml
有时候爬数据遇到像下面这种,数据在script标签中以javascript形式存在. var totalReviewsValue = 32; var averageRating = 4.5; if(t ...
最新文章
- 自动生成Mapper文件(基于Mybatis Maven插件)
- Linux中的用户和组
- 【Linux】24.gdb调试和coredump
- 大整数乘法(Java)
- 如何将知识引入机器学习模型提升泛化能力?
- Python读取word文档(python-docx包)
- 对Redis配置中bind的探索
- 给Bert加速吧!NLP中的知识蒸馏Distilled BiLSTM论文解读
- 使用Emit的时候类型XXX尚未完成
- python3实现扫码获取微信openid功能
- KETTLE的文本文件输出
- 虚拟机运行python_虚的解释|虚的意思|汉典“虚”字的基本解释
- Unity利用SMSSDK实现短信验证码(附源代码)
- ios-自建网页在浏览器安装ipa包
- 精细化运营:RFM模型在手游付费用户分群中的优化与应用
- 短信验证码是什么?短信验证码是什么意思
- 利用ICommand和ITool重写Arcengine中控件的事件
- 适合理工直男的钟平老师逻辑英语学习笔记
- python将图片转换为csv
- python变量名可以用下划线开头吗_python以下划线开头的变量和函数的作用