使用javascript函数编写简单银行取钱存钱流程,微信小程序上传图片功能

几乎每个程序都需要用到图片,在小程序中我们可以通过image组件显示图片。

值属性

具体代码如下所述:

当然小程序也是可以上传图片的,微信小程序文档也写的很清楚。

这部分属性只是简单的值,它们没有自己的属性和方法。

const readline = require('readline-sync')//引用readline-sync
let arr = [['zhang', '123', 2000], ['yang', '123456', 3000]];
//登陆 
let add = function () {
  let s = 2;//输入错误的次数
  while (true) {
    console.log('请输入用户名:');
    let user = readline.question();
    console.log('请输入密码:');
    let password = readline.question();
    for (let i = 0; i < arr.length; i++) {   
      if (user === arr[i][0] && password === arr[i][1]) {
        console.log('欢迎你,登陆成功');
        mean(i);
        return;
      }
    }
    //输入不正确,超过三次
    if (s != 0) {
      console.log(`密码或账户有误,你还有${s}次机会,请重新输入!`);
      s--;
    } else {
      console.log('对不起,账户锁定!');
      break;
    }
  }
}
//存款
let fn1 = function (i) {
  console.log('存款');
  console.log('请输入存款金额:');
  let cunkuan = readline.question() - 0;
  arr[i][2]+= cunkuan;
  console.log('系统正在为你存钱请稍等。。。。。\n存钱成功您当前余额为' + arr[i][2]);
}
//取款
let fn2 = function (i) {
  console.log('取款');
  console.log('请输入取款金额:');
  let qukuan = readline.question() - 0;
  if (qukuan > arr[i][2]) {
    console.log('对不起你的余额不足!,请重新输入金额或者退出');
  } else {
    arr[i][2] = arr[i][2] - qukuan;
    console.log('正在为你取钱。。。。。\n您当前余额为:' + arr[i][2]);
  }
}
//查看
let fn3 = function (i) {
  console.log('查看');
  console.log('正在查询。。。。\n您当前的余额为:' + arr[i][2]);
}
//退出
let fn4 = function () {
  console.log('退出');
  console.log('欢迎你下次使用!');
}
//流程
let mean = function (i) {
  for (let yewu = 1; yewu >= 1; yewu++) {
    console.log('请选择业务:\n1.存款: \n2.取款: \n3.查看: \n4.退出:');
    let yewu = readline.question() - 0;
    switch (yewu) {
      case 1:
        fn1(i);
        continue;
      case 2:
        fn2(i);
        continue;
      case 3:
        fn3(i);
        continue;
      case 4:
        fn4();
        return;
    }break;
  }
}
add();

上传图片

Infinity

全局属性 Infinity 是一个数值,表示无穷大。

总结

首先选择图片

NaN

全局属性 NaN 的值表示不是一个数字(Not-A-Number)。

以上所述是小编给大家介绍的使用javascript函数编写简单银行取钱存钱流程,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

通过wx.chooseImage(OBJECT)实现

undefined

全局属性undefined表示原始值undefined。它是一个JavaScript的 原始数据类型

您可能感兴趣的文章:

  • js
    Date()日期函数浏览器兼容问题解决方法
  • 一个Js文件函数中调用另一个Js文件函数的方法演示
  • Mysql5.7中JSON操作函数使用说明
  • require.js中的define函数详解
  • JS中把函数作为另一函数的参数传递方法(总结)

图片 1

null

值 null 特指对象的值未设置。它是 JavaScript 基本类型 之一。

函数属性

全局函数可以直接调用,不需要在调用时指定所属对象,执行结束后会将结果直接返回给调用者。

官方示例代码

eval(str)

eval() 函数会将传入的字符串当做 JavaScript 代码进行执行。

PS:eval会造成安全和性能方面的问题,具体参见避免在不必要的情况下使用
eval。

wx.chooseImage({
 count: 1, // 默认9
 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
 sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
 success: function (res) {
 // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
 var tempFilePaths = res.tempFilePaths
 }
})

isFinite(arg)

判断被传入的值(非number类型将转换为number类型)是否为有限值。

图片最多可以选择9张,
也可以通过拍摄照片实现,当选择完图片之后会获取到图片路径,
这个路径在本次启动期间有效。
如果需要保存就需要用wx.saveFile(OBJECT)

isNaN()

判断被传入的值(非number类型将转换为number类型)是否为NaN。

PS:使用Number.isNaN()来代替更有语义性。

上传图片

parseFloat(str)

parseFloat() 函数解析一个字符串参数并返回一个浮点数。

PS:如果在解析过程中遇到了正负号(+或-),数字(0-9),小数点,或者科学记数法中的指数(e或E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数.同时参数字符串首位的空白符会被忽略.
如果第一个字符不能解析,直接返回NaN。

通过wx.uploadFile(OBJECT)
可以将本地资源文件上传到服务器。

parseInt(str, radix);

parseInt() 函数解析一个字符串参数,并返回一个指定基数的整数
(数学系统的基础)。

PS:radix一个介于2和36之间的整数,表示上述字符串的基数(默认为10)。

原理就是客户端发起一个 HTTPS POST 请求,其中 content-type为
multipart/form-data。

encodeURI(URI)

函数通过将特定字符的每个实例替换为一个、两个、三或四转义序列来对统一资源标识符
(URI) 进行编码 (该字符的 UTF-8 编码仅为四转义序列)由两个 “代理”
字符组成)。
PS:encodeURI
字母、数字、;、,、/、?、:、@、&、=、+、$、-、_、.、!、~、*、’、(、)、#、之外的所有字符。

图片 2

decodeURI(encodeURI)

decodeURI() 函数解码一个由encodeURI
先前创建的统一资源标识符(URI)或类似的例程。

官方示例代码

encodeURIComponent(str)

encodeURIComponent()是对统一资源标识符(URI)的组成部分进行编码的方法。

PS:encodeURIComponent
转义除了字母、数字、(、)、.、!、~、*、’、-和_之外的所有字符。
为了避免服务器收到不可预知的请求,对任何用户输入的作为URI部分的内容你都需要用encodeURIComponent进行转义。

wx.chooseImage({
 success: function(res) {
 var tempFilePaths = res.tempFilePaths
 wx.uploadFile({
  url: 'http://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址
  filePath: tempFilePaths[0],
  name: 'file',
  formData:{
  'user': 'test'
  },
  success: function(res){
  var data = res.data
  //do something
  }
 })
 }
})

decodeURIComponent(encodedURI)

decodeURIComponent() 方法用于解码由 encodeURIComponent
方法或者其它类似方法编码的部分统一资源标识符(URI)。

示例代码

encodeURI和encodeURIComponent的区别与使用场景

区别在于编码的字符范围不同。

encodeURI使用于编码整个URI而encodeURIComponent主要query部分(当你需要编码URL中的参数)。
简单明了区分escape、encodeURI和encodeURIComponent

Function

全局的Function对象没有自己的属性和方法, 但是,
因为它本身也是函数,所以它也会通过原型链从Function.prototype上继承部分属性和方法。

看完了官方文档, 写一个上传图片就没有那么麻烦了,下面是真实场景的代码

原型属性

import constant from '../../common/constant';
Page({
 data: {
 src: "../../image/photo.png", //绑定image组件的src
  //略...
 },
 onLoad: function (options) {
  //略... 
 },
 uploadPhoto() {
 var that = this; 
 wx.chooseImage({
  count: 1, // 默认9
  sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有
  sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
  success: function (res) {
  // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
  var tempFilePaths = res.tempFilePaths;
  upload(that, tempFilePaths);
  }
 })
 }
})

function upload(page, path) {
 wx.showToast({
 icon: "loading",
 title: "正在上传"
 }),
 wx.uploadFile({
  url: constant.SERVER_URL + "/FileUploadServlet",
  filePath: path[0], 
  name: 'file',
  header: { "Content-Type": "multipart/form-data" },
  formData: {
  //和服务器约定的token, 一般也可以放在header中
  'session_token': wx.getStorageSync('session_token')
  },
  success: function (res) {
  console.log(res);
  if (res.statusCode != 200) { 
   wx.showModal({
   title: '提示',
   content: '上传失败',
   showCancel: false
   })
   return;
  }
  var data = res.data
  page.setData({ //上传成功修改显示头像
   src: path[0]
  })
  },
  fail: function (e) {
  console.log(e);
  wx.showModal({
   title: '提示',
   content: '上传失败',
   showCancel: false
  })
  },
  complete: function () {
  wx.hideToast(); //隐藏Toast
  }
 })
}

length

定义:指明函数的形参个数(确定多少个必须要传入的参数)区别于arguments.length实参个数(确定函数被调用时的实际传参个数)。

后端代码

constructor

定义:返回创建实例对象的 Object 构造函数的引用。

后端是用java写的,一开始的时候,后端开始用了一些框架接收上传的图片,出现了各种问题,后来使用了纯粹的Servlet就没有了问题,
把代码贴出来省的以后麻烦了。

原型方法

注意: 代码使用了公司内部的框架,建议修改后再使用

func.apply(thisArg, [argsArray])

定义:调用一个函数,
其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。
参数:thisArg为func函数执行时this的指向,argsArray为类数组参数数组。
返回:调用有指定this值和参数的函数的结果。

public class FileUploadServlet extends HttpServlet {

 private static final long serialVersionUID = 1L;
 private static Logger logger = LoggerFactory.getLogger(FileUploadServlet.class);

 public FileUploadServlet() {
  super();
 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  JsonMessage<Object> message = new JsonMessage<Object>();
  EOSResponse eosResponse = null;
  String sessionToken = null;
  FileItem file = null;
  InputStream in = null;
  ByteArrayOutputStream swapStream1 = null;
  try {
   request.setCharacterEncoding("UTF-8"); 

   //1、创建一个DiskFileItemFactory工厂 
   DiskFileItemFactory factory = new DiskFileItemFactory(); 
   //2、创建一个文件上传解析器 
   ServletFileUpload upload = new ServletFileUpload(factory);

   //解决上传文件名的中文乱码 
   upload.setHeaderEncoding("UTF-8"); 
   // 1. 得到 FileItem 的集合 items 
   List<FileItem> items = upload.parseRequest(request);
   logger.info("items:{}", items.size());
   // 2. 遍历 items: 
   for (FileItem item : items) { 
    String name = item.getFieldName(); 
    logger.info("fieldName:{}", name);
    // 若是一个一般的表单域, 打印信息 
    if (item.isFormField()) { 
     String value = item.getString("utf-8"); 
     if("session_token".equals(name)){
      sessionToken = value;
     }
    }else {
     if("file".equals(name)){
      file = item;
     }
    } 
   }
   //session校验
   if(StringUtils.isEmpty(sessionToken)){
    message.setStatus(StatusCodeConstant.SESSION_TOKEN_TIME_OUT);
    message.setErrorMsg(StatusCodeConstant.SESSION_TOKEN_TIME_OUT_MSG);
   }
   String userId = RedisUtils.hget(sessionToken,"userId");
   logger.info("userId:{}", userId);
   if(StringUtils.isEmpty(userId)){
    message.setStatus(StatusCodeConstant.SESSION_TOKEN_TIME_OUT);
    message.setErrorMsg(StatusCodeConstant.SESSION_TOKEN_TIME_OUT_MSG);
   }
   //上传文件
   if(file == null){
   }else{
    swapStream1 = new ByteArrayOutputStream();

    in = file.getInputStream();
    byte[] buff = new byte[1024];
    int rc = 0;
    while ((rc = in.read(buff)) > 0) {
     swapStream1.write(buff, 0, rc);
    }

    Usr usr = new Usr();
    usr.setObjectId(Integer.parseInt(userId));

    final byte[] bytes = swapStream1.toByteArray();

    eosResponse= ServerProxy.getSharedInstance().saveHeadPortrait(usr, new RequestOperation() {

     @Override
     public void addValueToRequest(EOSRequest request) {
      request.addMedia("head_icon_media", new EOSMediaData(EOSMediaData.MEDIA_TYPE_IMAGE_JPEG, bytes));
     }
    });

    // 请求成功的场合
    if (eosResponse.getCode() == 0) {
     message.setStatus(ConstantUnit.SUCCESS);
    } else {
     message.setStatus(String.valueOf(eosResponse.getCode()));
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally{
   try {
    if(swapStream1 != null){
     swapStream1.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
   try {
    if(in != null){
     in.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  PrintWriter out = response.getWriter(); 
  out.write(JSONObject.toJSONString(message)); 
 }

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doGet(request, response);
 }

}

fun.call(thisArg, arg1, arg2, …)

定义:调用一个函数,
其具有一个指定的this值和分别地提供的参数(参数的列表)。
参数:thisArg为func函数执行时this的指向,arg1, arg2,
…为指定的参数列表。
返回:返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。
运用:1.使用call方法调用父构造函数(在一个子构造函数中,你可以通过调用父构造函数的call方法来实现继承)
2.使用call方法调用匿名函数3.使用call方法调用函数并且指定上下文的’this’
运用举例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

fun.bind(thisArg[, arg1[, arg2[, …]]])

定义:调用一个函数,
其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。
参数:thisArg为当绑定函数被调用时,该参数会作为原函数运行时的 this
指向,arg1、arg2…为当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法。
返回:由指定的this值和初始化参数改造的原函数拷贝(返回一个函数)。
运用:1.创建绑定函数(显式绑定this)2.偏函数(使一个函数拥有预设的初始参数)。
运用举例

您可能感兴趣的文章:

  • 微信小程序上传图片实例
  • 微信小程序实现上传图片功能
  • 微信小程序开发(二)图片上传+服务端接收详解
  • 微信小程序
    wx.uploadFile无法上传解决办法
  • 微信小程序多张图片上传功能
  • 微信小程序图片选择、上传到服务器、预览(PHP)实现实例
  • 微信小程序-拍照或选择图片并上传文件
  • 微信小程序教程之本地图片上传(leancloud)实例详解
  • 微信小程序上传图片到服务器实例代码
  • 微信小程序实现图片上传功能

Function.prototype.toString()

定义:返回一个表示当前函数源代码的字符串。
参数:null。
返回:表示函数源代码的一个字符串。

Number

JavaScript 的 Number 对象是经过封装的能让你处理数字值的对象。
Number(),如果参数无法被转换为数字,则返回 NaN。

属性

Number.EPSILON

两个可表示(representable)数之间的最小间隔,在进行计算时误差在这个范围内被认为是合理的。

Number.MAX_SAFE_INTEGER

JavaScript 中最大的安全整数 (2^53 – 1)。

Number.MIN_SAFE_INTEGER

JavaScript 中最小的安全整数 (-(2^53 – 1)).

Number.MAX_VALUE

能表示的最大正数。最小的负数是 -MAX_VALUE。

Number.MIN_VALUE

能表示的最小正数即最接近 0 的正数 (实际上不会变成 0)。最大的负数是
-MIN_VALUE。

Number.NaN

Not A Number.

Number.NEGATIVE_INFINITY

特殊的负无穷大值,在溢出时返回该值。

Number.POSITIVE_INFINITY

特殊的正无穷大值,在溢出时返回改值。

方法

下列方法均不会发生将String转化为Number的过程。

Number.isNaN(value)

定义:确定传递的值是否为 NaN和其类型是
Number。它是用于代替原始的全局isNaN()。
参数:要被检测是否是 NaN 的值。
返回:一个布尔值,表示给定的值是否是 NaN。
PS:该方法不同于全局的isNaN(),不会将字符串转换为数字。

Number.isFinite(value)

定义:用来检测传入的参数是否是一个有穷数(finite number)。
参数:value要被检测有穷性的值。
返回:一个布尔值表示给定的值是否是一个有穷数。
PS:和全局的 isFinite()
函数相比,这个方法不会强制将一个非数值的参数转换成数值。

Number.isInteger(value)

定义:用来判断给定的参数是否为整数。
参数:value要判断此参数是否为整数。
返回:判断给定值是否是整数的 Boolean 值。

Number.isSafeInteger(testValue)

定义:用来判断传入的参数值是否是一个“安全整数”(safe integer)。
参数:testValue需要检测的参数。
返回:一个布尔值 表示给定的值是否是一个安全整数(safe integer)。

Number.parseFloat(string)

定义:可以把一个字符串解析成浮点数。
参数:string被解析的字符串。
返回:对应的浮点数。
PS:与全局函数 parseFloat()一样。

Number.parseInt(string[, radix])

定义:可以根据给定的进制数的一个字符串数解析成整数。
参数:string要解析的值,radix一个介于2和36之间的整数(数学系统的基础),表示上述字符串的基数。

实例方法

下列方法均返回为字符串。

numObj.toExponential([fractionDigits])

定义:以指数表示法返回该数值字符串表示形式。
参数:fractionDigits一个整数,用来指定小数点后有几位数字。
返回:一个用幂的形式 (科学记数法) 来表示Number 对象的字符串。

numObj.toFixed(digits)

定义:使用定点表示法来格式化一个数。
参数:digits小数点后数字的个数。
返回:所给数值的定点数表示法的字符串形式。

numObj.toPrecision(precision)

定义:以指定的精度返回该数值对象的字符串表示。
参数:precision一个用来指定有效数个数的整数。
返回:以定点表示法或指数表示法表示的一个数值对象的字符串表示。

numObj.toLocaleString([locales [, options]])

定义:返回这个数字在特定语言环境下的表示字符串。
参数:locales为指定本地要使用的编号系统,options为有下列属性(localeMatcher、style、currency等等但存在一定的兼容性)
返回:返回一个语言环境下的表示字符串。
PS:通常用于格式化为某种货币形式。

numObj.toString([radix])

定义:返回指定 Number 对象的字符串表示形式。
参数:radix指定要用于数字到字符串的转换的基数(从2到36)。
返回:转换后的字符串。

numObj.valueOf()

定义:返回一个被 Number 对象包装的原始值。
返回:表示指定 Number 对象的原始值的数字。

String

静态方法

String.fromCharCode(num1, …, numN)

定义:返回使用指定的Unicode值序列创建的字符串。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图