摘要:的副作用通过声明的变量不能。需要注意的是中通过和声明的变量是不存在变量提升情况的。第二个阶段是代码执行,函数表达式和不合格的标识符为声明的变量被创建。为了避免矛盾和意外的结果,总是指定基数参数第二个参数。
变量 最小全局变量
每个JavaScript环境有一个全局对象,浏览器中就是window对象,Node环境中是global对象,在函数外面,this指向window对象,不管是通过var 声明或者直接创建的变量,都是这个全局对象的属性。在函数内部通过var声明的变量只会成为一个函数内部局部变量,直接创建的对象还是会成为全局对象的属性。
this指向调用改函数的对象 var myglobal = "hello"; // 不推荐写法 console.log(this); // window console.log(myglobal); // "hello" console.log(window.myglobal); // "hello" console.log(window["myglobal"]); // "hello" console.log(this.myglobal); // "hello" (function (){ var mylocal= "world"; myglobal1 = "!!"; console.log(this); //window console.log(mylocal); //"world" console.log(window.mylocal); //undefined console.log(this.indow.mylocal); //undefined console.log(window.myglobal1); //"!!" console.log(myglobal1); //"!!" }());
需要注意的地方:
创建隐式全局变量 var a = b = 0; 赋值运算从右到左,在此情况下好比var a = (b = 0),b是未声明的。
var的副作用
通过var 声明的变量不能delete。
JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样(变量提升)发挥作用。需要注意的是ES6中通过let和const声明的变量是不存在变量提升情况的。
// 例子 myname = "global"; // 全局变量 function func() { alert(myname); // "undefined" var myname = "local"; alert(myname); // "local" } func(); myname = "global"; // global variable function func() { var myname; // 等同于 -> var myname = undefined; alert(myname); // "undefined" myname = "local"; alert(myname); // "local"} func();
代码处理分两个阶段,第一阶段是变量,函数声明,以及正常格式的参数创建,这是一个解析和进入上下文的阶段。第二个阶段是代码执行,函数表达式和不合格的标识符(为声明的变量)被创建。变量,函数的声明永远在代码处理的第一步,与代码编写位置无关。
定义变量
ECMAScript变量是松散类型的,可以保存任何类型的数据。
var message = "hello" ; message = 100; //有效,不推荐
通过var定义局部变量;忽略var会定义全局变量,作为window的属性;
使用未定义的变量,会报错,xxx is not defined,对于未定义的变量,只能使用typeof操作符,返回"undefined"。
var message; 等同于 var message = undefined; 非 var message = "undefined";数据类型
5种简单数据类型
Undefined, Null, Boolean, Number, String
复杂数据类型
Object
Null 类型
null值表示一个空对象指针,如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样只要检查变量的值是否为null,就可以判断变量是否判断一个对象的引用。
console.log( null == undefined); // true console.log( null === undefined); // false obj !=null 可以判断对象是否为null 或者 为undefined var obj; console.log(obj != null) //false console.log(obj != undefined) //false
使用typeof操作符返回字符串
"undefined" 变量未定义或者声明定义后未赋值。除了typeof操作符,操作未定义的变量会报错 "boolean" 变量的值是布尔值 "string" 变量的值是字符串 "number" 变量的值是数值 "object" 变量的值是对象或null "function" 变量的值是函数数据类型转换
隐式类型转换
Number 类型
如果小数点后面没有跟任何数字,或者浮点数值本身就是一个整数,那么该浮点数会被转换为整数。保存浮点数所需的内存空间是整数的两倍,如果可能,ECMAScript会不失时机地将浮点数转化为整数。
var floatNum1 = 1.; // 解析为1 var floatNum2 = 10.0; // 解析为10
基于IEEE754数值的浮点计算会产生舍入误差,不要测试某个特定的浮点数值。
console.log(0.1 + 0.2 == 0.3); // false
非数值转换为数值
Number();
parseInt(); 指定基数
parseFloat(); 只解析十进制值,没有第二个参数指定基数
+;
console.log(+"5"); //5 console.log(+"5.5"); //5.5 console.log(+"5w"); //NaN console.log(+"ww"); //NaN console.log(parseInt("5",10)); // 5 console.log(parseInt("5.5",10)); //5 console.log(parseInt("5w",10)); //5 console.log(parseInt("ww",10)); //NaN var month = "06", year = "09"; console.log(parseInt(month)); //6 console.log(parseInt(month, 10)); //6 console.log(parseInt(year)); //0 console.log(parseInt(year, 10)); //9
parseInt()可以从字符串中获取数值。当字符串以”0″开头的时候就有可能会出问题,开头为”0″的字符串会被当做8进制处理。为了避免矛盾和意外的结果,总是指定基数(radix)参数---第二个参数。
+"08" // 结果是 8 +"08netease" //NaN Number("08") // 8 Number("08netease") //NaN parseInt("08netease", 10) //8 parseInt(arg0, arg1)较慢
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/86061.html
摘要:一栈数据结构与不同,中并没有严格意义上区分栈内存与堆内存。引用数据类型的值是保存在堆内存中的对象。不允许直接访问堆内存中的位置,因此我们不能直接操作对象的堆内存空间。为了更好的搞懂变量对象与堆内存,我们可以结合以下例子与图解进行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...
摘要:函数式编程最后介绍一下函数式编程。函数式编程是一种历史悠久,而又在最近颇为热门的话题。函数式编程在面向对象一词诞生以前就已经存在,不过它在很长一段时间里都被隐藏于过程式编程面向对象也是过程式编程的一种的概念之下。 2.1 JavaScript特点 总结以下几个特点: 解释型语言 类似与C和Java的语法结构 动态语言 基于原型的面向对象 字面量的表现能力 函数式编程 解释型语言:...
摘要:用和包裹的内容,称为字符串。关系运算符用于进行比较的运算符。强制依赖于,非强制依赖于。使用场合全局环境构造函数对象的方法闭包闭包是指有权访问另一个函数作用域中的变量的函数。所有全局对象函数以及变量均自动成为对象的成员。 1 什么是JavaScript JavaScript一种直译式脚本语言,一种基于对象和事件驱动并具有安全性的客户端脚本语言;也是一种广泛应用客户端web开发的脚本语言。...
摘要:隐式转换数字字符串数字转换为字符串数字布尔值转换为,转换为字符串布尔值布尔值转换为或布尔值布尔值和表示一种未知状态,声明了但没有初始化的变量,变量的值时一个未知状态。 Javascript基础 简介 JavaScript,一种直译式脚本语言,是一种动态类型、基于原型的语言,内置支持类别。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTM...
摘要:第十六天笔记基础语法区分大小写是一种区分大小写的语言的关键字变量名函数名以及任何其他的标识符必须适应一致的大小写形势卧龙前端空格和换行并不是的语法内容可有可无建议使用将代码书写的更加整洁美观更有可读性可选的分号分号可选项语法并不是强制要 第十六天笔记 JavaScript 基础语法 区分大小写 JavaScript是一种区分大小写的语言 JavaScript的关键字 变量名 函...
摘要:变量定义变量使用关键字变量名变量名可以任意取名,但要遵循命名规则变量必须使用字母下划线或者美元符开始。语法参数说明在消息对话框中要显示的文本返回值值。返回值点击确定按钮,文本框中的内容将作为函数返回值。 简述 本系列将持续更新Javascript基础部分的知识,谁都想掌握高端大气的技术,但是我觉得没有一个扎实的基础,我认为一切高阶技术对我来讲都是过眼云烟,要成为一名及格的前端工程师,必...
阅读 4969·2023-04-25 19:30
阅读 2103·2023-04-25 15:09
阅读 2601·2021-11-16 11:45
阅读 2149·2021-11-15 18:07
阅读 1443·2021-11-11 17:22
阅读 2095·2021-11-04 16:06
阅读 3545·2021-10-20 13:47
阅读 3000·2021-09-22 16:03