前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js程序设计01——基本概念

js程序设计01——基本概念

作者头像
用户1141560
发布2017-12-26 11:36:33
7620
发布2017-12-26 11:36:33
举报
文章被收录于专栏:西安-晁州西安-晁州

本文为js高级程序设计学习笔记,笔记中不乏本人学习js的一些心得demo,喜欢的朋友可以直接参考原书“javascript高级程序设计”,写本笔记的目的是对js中容易出错、不易理解的地方作个笔记,以免后期继续踩坑。

1、语法

  • 区分大小写:比如typeof用于测试数据类型,不同于typeOf,一个func完全可以定义为typeOf
  • 标识符:首字符必须是字母、下划线或$,之后可以是数字、字母、下划线或$;标识符不能使用系统关键字及保留字,比如var、true、false、null、let等
  • 严格模式:

严格模式是ECMAScript 5中引入的概念,是为js定义解析以及执行模型的一种机制,也是为了兼容旧版本的ECMAScript版本而引入的,就是一种编译指示,可以确定ECMAScript 3版本编译运行时的一些不确定行为。使用"use strict",方法如下:

代码语言:javascript
复制
function say(){
  "use strict";
  console.log("hello strict mode");
}

say();

2、变量

所有未经初始化的变量始终为undefined,不论变量类型:

代码语言:javascript
复制
function say(){
  var message = "hello message";
}
say();
alert(message);  //message未定义为undefined

但是如果省略了var关键字,则message自动上升为全局变量,不会报错:

代码语言:javascript
复制
function say(){
  message = "hello message";
}
say();
console.log(message);

结果:

变量声明初始化允许同时进行,比如:

代码语言:javascript
复制
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的返回值可以是如下几种:

代码语言:javascript
复制
“undefined”——唯一的Undefined类型值,表示“未定义”;
“boolean”——对于Boolean的true or false返回;
“string”——字符串返回;
“number”——数值类型值返回;
“object”——Object类型或者Null类型均返回;
“function”——函数返回;

下面是简单测试:

代码语言:javascript
复制
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的测试如下:

代码语言:javascript
复制
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类型:

创建:

代码语言:javascript
复制
var o = new Object();

Object的每个实例都有如下属性和方法:

  • constructor:保存着用于创建当前对象的函数
  • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
  • hasOwnProperty(propertyName):用于检查给定的属性是否在当前对象实例中
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句枚举
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串、数值或布尔值表示

4、函数类型

ECMAScript的函数支持不定参数,实际上通过arguments对象即可直接获取请求的参数,函数定义时可以不用指定参数,使用时也可以传入任意数量参数:

代码语言:javascript
复制
function say(){
  for(var i=0,len=arguments.length;i<len;i++){
    console.log(arguments[i]);
  }
}

say(12,"343","1231");
代码语言:javascript
复制
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个同名函数,则第二个会覆盖第一个函数:

代码语言:javascript
复制
function say(){
  console.log(1111);
}

say();      //2222

function say(){
  console.log(2222);      
}

say();      //2222
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-09-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档