js程序设计01——基本概念
本文为js高级程序设计学习笔记,笔记中不乏本人学习js的一些心得demo,喜欢的朋友可以直接参考原书“javascript高级程序设计”,写本笔记的目的是对js中容易出错、不易理解的地方作个笔记,以免后期继续踩坑。
1、语法
- 区分大小写:比如typeof用于测试数据类型,不同于typeOf,一个func完全可以定义为typeOf
- 标识符:首字符必须是字母、下划线或$,之后可以是数字、字母、下划线或$;标识符不能使用系统关键字及保留字,比如var、true、false、null、let等
- 严格模式:
严格模式是ECMAScript 5中引入的概念,是为js定义解析以及执行模型的一种机制,也是为了兼容旧版本的ECMAScript版本而引入的,就是一种编译指示,可以确定ECMAScript 3版本编译运行时的一些不确定行为。使用"use strict",方法如下:
function say(){
"use strict";
console.log("hello strict mode");
} say();
2、变量
所有未经初始化的变量始终为undefined,不论变量类型:
function say(){
var message = "hello message";
}
say();
alert(message); //message未定义为undefined
但是如果省略了var关键字,则message自动上升为全局变量,不会报错:
function say(){
message = "hello message";
}
say();
console.log(message);
结果:
变量声明初始化允许同时进行,比如:
var m1 = "1",m2 = "2",m3 = [1,2,3];
console.log(m1);
console.log(m2);
console.log(m3);
3、数据类型
ECMAScript 5定义js有5中基本类型+1种复杂数据类型(引用类型),基本类型:Undefined、Null、Boolean、Number、String,复杂类型:Object。
其中typeof操作符是用来测试数据类型的,typeof的返回值可以是如下几种:
“undefined”——唯一的Undefined类型值,表示“未定义”;
“boolean”——对于Boolean的true or false返回;
“string”——字符串返回;
“number”——数值类型值返回;
“object”——Object类型或者Null类型均返回;
“function”——函数返回;
下面是简单测试:
var m1 = "message",m2 = true,m3 = 98,m4,m5 = {},m6 = null,m7 = function(){}; console.log(typeof m1);
console.log(typeof m2);
console.log(typeof m3);
console.log(typeof m4);
console.log(typeof m5);
console.log(typeof m6);
console.log(typeof m7);
Boolean类型的字面值true和false是区分大小写的,所有数据类型均可通过Boolean()转换函数转换为Boolean类型,对于Number类型,任何非零(包括无穷大)转换为true,0和NaN转换为false;对于Object类型来说,转换为true,null转换为false
关于NaN:
NaN(Not a Number)即非数值,是一个特殊数值,NaN有2个特点:
- 任何涉及NaN的操作都会返回NaN
- NaN与任何值都不相等,包括NaN本身
关于NaN的测试如下:
console.log(NaN / 10); //NaN
console.log(NaN / 0); //NaN
console.log(NaN == NaN); //false
console.log(isNaN(NaN)); //true
console.log(isNaN("")); //false
console.log(isNaN(12)); //false
console.log(isNaN("awd")); //true
console.log(isNaN("awd12")); //true
console.log(isNaN("12awd")); //true
console.log(isNaN(null)); //false
console.log(isNaN({})); //true
console.log(isNaN({valueOf:function(){ //false,如果是对象则调用其valueOf方法,查看返回是否匹配NaN
return -1;
}}));
console.log(isNaN({valueOf:function(){ //true
return "awdw";
}}));
关于Number()函数:
Number()函数用于将一个非数值转换为数值类型,Boolean直接返回1或0,null返回0,undefined返回NaN,如果是字符串:空字符串返回0,非空返回去除前导0的字符值,比如"011"返回11,如果非数值字符串返回NaN,比如"this is test"返回NaN;如果是对象,则调用对象的valueOf方法返回。
关于Object类型:
创建:
var o = new Object();
Object的每个实例都有如下属性和方法:
- constructor:保存着用于创建当前对象的函数
- isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
- hasOwnProperty(propertyName):用于检查给定的属性是否在当前对象实例中
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句枚举
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
- toString():返回对象的字符串表示
- valueOf():返回对象的字符串、数值或布尔值表示
4、函数类型
ECMAScript的函数支持不定参数,实际上通过arguments对象即可直接获取请求的参数,函数定义时可以不用指定参数,使用时也可以传入任意数量参数:
function say(){
for(var i=0,len=arguments.length;i<len;i++){
console.log(arguments[i]);
}
} say(12,"343","1231");
function say2(name,age){
console.log(name);
console.log(name == arguments[0]);
console.log(age);
console.log(age == arguments[1]);
} say2("admin",23);
ECMAScript的函数不支持重载,如果定义了2个同名函数,则第二个会覆盖第一个函数:
function say(){
console.log(1111);
} say(); //2222 function say(){
console.log(2222);
} say(); //2222
js程序设计01——基本概念的更多相关文章
- 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB
走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
- .NET的堆和栈01,基本概念、值类型内存分配
当我们对.NET Framework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识.比如.NET Framework是如何进行内存管理的,是如何垃圾回收的......这样,我们才能写出 ...
- 深入浅出Win32多线程程序设计之基本概念
一.深入浅出Win32多线程程序设计之基本概念[转] 引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓 ...
- js程序设计02——变量、作用域问题
首先,ECMAScript中的数据类型分为基本类型.引用类型,基本类型的访问操作是按值的.引用类型的值是保存在内存中的对象,操作对象时,实际上操作的是对象的引用,而非对象自身.“javascript高 ...
- 《JavaScript高级程序设计》 -- 基本概念(一)
之前看过好几遍<JavaScript高级程序设计>这一书,但是始终没有完完整整的看过一遍.从现在开始我会把它完整的啃一遍,每章节都记录笔记,自己的心得,加油! 由于前三章的内容比较简单,因 ...
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...
- javascript高级编程笔记01(基本概念)
1.在html中使用JavaScript 1. <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...
随机推荐
- JAVA通过HTTP访问:Post+Get方式(转)
public class TestGetPost { /** * 向指定URL发送GET方法的请求 * @param url 发送请求的URL * @param param 请求参数,请求参数应该是n ...
- mongodb:短网址项目
短网址项目概述 1.短网址项目,是将给定的长网址,转换成短网址. 如 新浪 http://t.cn/zQd5NPw ,其中zQd5NPw就是短网址 前段页面如下
- ASP.NET 创建网站地图
很多个人站长会使用工具来生成自己网站的站点地图,这样做的缺点在于网站的 sitemap 不能及时的得到更新.当我们发表了一篇新文章时,应该对网站的地图进行更新,并通知搜索引擎网站地图已经发生了改变! ...
- 高频交易策略[z]
Market Order以最高速下市价单(market order)是买方最基本的策略 Looking for Price Discrepancies 这个就是高频统计套利(high frequenc ...
- 结合Apache和Tomcat实现集群和负载均衡
http://fableking.iteye.com/blog/360870 TomcatApacheJSP应用服务器Web 本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实 ...
- Fiddler怎么对IPhone手机的数据进行抓包分析
http://www.cr173.com/html/20064_1.html Fiddler绝对称得上是"抓包神器", Fiddler不但能截获各种浏览器发出的HTTP请求, 也可 ...
- [VBS]带参数删除扩展名不是*.h、*.c、*.cpp的全部文件
脚本使用例程CleanFolder遍历一个文件夹 1)使用CleanFolder递归遍历该文件夹下的所有子文件夹 2)如果该子文件夹的大小为0,则删除这个文件夹 3)遍历该文件夹下的所有文件,扩展名不 ...
- css3之边框新属性
border属性 属性 描述 border-image 图片边框 border-radius 圆角 box-shadow 矩形阴影
- Wall--POJ1113(极角排序+求凸包)
http://poj.org/problem?id=1113 题目大意:现在要给n个点,让你修一个围墙把这些点围起来,距离最小是l 分析 :现在就是求凸包的周长然后再加上一个圆的周长 #includ ...
- Big Number--hdu1018(数学)
http://acm.hdu.edu.cn/showproblem.php?pid=1018 题目大意 : 求一个数的阶乘的位数 公式log10(n!)=log10(1)+log10(2)+log1 ...